Sto cercando di trovare il numero massimo di nodi coperti tramite un percorso in un dato grafico. Ho creato un programma usando la ricorsione, ma sta dando una risposta solo per un semplice grafico non su un grafico complicato.Come coprire il numero massimo di nodi tramite un determinato percorso in un grafico?
L'input viene fornito in una stringa di tipo 1 # 2: il nodo 1 è collegato al nodo 2 o viceversa.
Ho creato una matrice della dimensione totale dei nodi e se il nodo è collegato, impostare 1 altro -1 nella matrice. Questa matrice viene utilizzata per calcolare il nodo coperto massimo nel percorso.
Codice:
import java.io.*;
import java.util.*;
public class Medium
{
public static int node_covered;
public static int big=0;
public static boolean[] visited;
public static int matrix_length;
public static String[][] matrix;
public static String[] input=new String[]
//answer is 7.
{"1#2", "2#3","3#4","3#5","5#6","5#7","6#7","7#8"};
public static void main(String[] args){
int total_nodes=maxno_city(input);
System.out.println(total_nodes);
}
public static int maxno_city(String[] input1)
{
int ln=input1.length;
HashSet hs = new HashSet();
for(int i=0; i<ln;i++)
{
String[] temp=input1[i].split("#");
hs.add(temp[0]);
hs.add(temp[1]);
}
matrix_length=hs.size();
hs.clear();
matrix=new String[matrix_length][matrix_length];
//initialize matrix
for (String[] row : matrix)
Arrays.fill(row, "-1");
//System.out.println(Arrays.deepToString(matrix));
for(int i=0;i<matrix_length;i++)
{
for(int j=0; j<matrix_length;j++)
{
String[] temp=input1[i].split("#");
int first=Integer.parseInt(temp[0])-1;
int second=Integer.parseInt(temp[1])-1;
matrix[first][second]="1";
matrix[second][first]="1";
}
}
//System.out.println(Arrays.deepToString(matrix));
//initialized
//now start work on matrix
for(int i=0;i<matrix_length;i++)
{
for(int j=0; j<matrix_length;j++)
{
visited=new boolean[matrix_length];
if(matrix[i][j].equals("1"))
{
node_covered=0;
getNextPath(j,i);
//visited[i]=true;
}
}
}
return big;
}
//recursive method
public static void getNextPath(int path,int visited_node)
{
boolean flag=false;
visited[visited_node]=true;
node_covered++;
for(int i=0;i<matrix_length;i++)
{
if(matrix[path][i].equals("1") && visited[i]==false)
{
//visited[i]=true;
flag=true;
getNextPath(i,path);
//visited[i]=false;
}
}
if(flag==false)
{
if(big<node_covered)
{
big=node_covered;
//System.out.println(big);
}
}
else
{
node_covered--;
}
//visited[path]=false;
}
}
Dove sto facendo errore nel codice di cui sopra?
questo potrebbe essere np-completo, non è sicuro controllare l' –
ha soluzione ... sto saltando qualcosa. Ecco perché ho chiesto qui. –
Sarebbe meglio se tu indicassi il problema sorgente in modo che avremmo anche alcuni casi di test. –