그래프 인접 행렬 (예 : g [] [])이 주어지면 그래프가 지정됩니다. 모든 그래프 사이클 (존재하는 경우)의 카운트를 찾아서 인쇄해야합니다.인접 행렬을 사용하여 C++에서 유향 그래프의 모든 사이클을 찾는 알고리즘
자바로이 알고리즘을 작성하려고했는데 때로는 제대로 작동합니다. 그래프에 복잡한 사이클이있는 경우 알고리즘이 미친 사이클을 반환합니다. 제발 내 코드를보고이 문제를 해결하는 데 도움이됩니다.
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;
}
나는 누군가가 당신을 위해 코드를 작성하는 것을 의심합니다. 발생한 문제에 대한 설명과 함께 시도한 것을 알려줄 필요가 있습니다. –
무한히 많은주기가 있다고 생각하십니까? –