La matrice d'adjacence de graphe donné (par exemple g [] []), le graphe est dirigé. Vous devez trouver le nombre de tous les cycles de graphique (s'il existe) et les imprimer.Algorithme pour trouver tous les cycles dans un graphe orienté en C++ à l'aide de la matrice d'adjacence
J'ai essayé d'écrire cet algorithme en Java, parfois cela fonctionne correctement. Si le graphe a des cycles complexes, l'algorithme retourne des cycles fous. S'il vous plaît, regardez mon code et aidez à résoudre ce problème
public static final int k = 6;
public static int g[][] = { { 0, 1, 0, 0, 0, 0 },
{ 1, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 1, 0 },
{ 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 } };
public static Vector stack = new Vector();
public static void printStack() {
System.out.print("stack is: { ");
for (int i = 0; i < stack.size(); i++) {
System.out.print(stack.get(i) + " ");
}
System.out.println("};");
}
public static boolean checkCycle() {
boolean res = false;
for (int i = 0; i < stack.size() - 1; i++) {
if (stack.get(i).equals(stack.lastElement())) {
res = true;
break;
}
}
return res;
}
public static boolean go_to_line(int line) {
boolean res = false;
for (int i = 0; i < k; i++) {
if (g[line][i] == 1) {
stack.add(i);
if (checkCycle() == true) {
System.out.println("Cycle found!");
res = true;
} else {
res = go_to_line(i);
}
}
}
return res;
}
public static int cycles_count() {
int res = 0;
for (int i = 0; i < k; i++) {
if (g[i][i] == 1) {
System.out.println("Knot detected at item {" + i + "}!");
res++;
}
for (int j = i + 1; j < k; j++) {
if (g[j][i] == 1) {
stack.add(j);
stack.add(i);
if (go_to_line(i) == true) {
res++;
System.out.print("Final ");
printStack();
stack.removeAllElements();
}
}
}
}
return res;
}
Je doute que quelqu'un se contente d'écrire le code pour vous. Vous devrez nous montrer ce que vous avez essayé, avec au moins une description du (des) problème (s) que vous avez rencontré (s). –
Avez-vous considéré qu'il peut y avoir un nombre infini de cycles? –