查寻无向图中的环
查找无向图中的环
static int[][] M = { { 0, 1, 0, 0, 0, 0 }, { 1, 0, 1, 1, 0, 0 }, { 0, 1, 0, 1, 0, 0 }, { 0, 1, 1, 0, 1, 1 }, { 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 1, 0, 0 } }; static int count=0; static int n=6; public static boolean findCircle(int[][] M, int i, int j) { boolean hasEdge=false; for (int t = 0; t < n; t++) { if (t != j) { if (M[i][t] == 2) { // find circle // print start vertex System.out.println(i + 1); // delete start vertex edage deleteVertexAndEdge(M, i); // find a circle count++; hasEdge=true; return true; } else if (M[i][t] == 1) { // visit M[i][t] = 2; hasEdge=true; if (findCircle(M, t, i)) { // if (isDelete(M, i)) { // find the start vertex of circle return false; } deleteVertexAndEdge(M, i); System.out.println(i + 1); return true; } } } } if(!hasEdge&&i<n-1&&M[i][j]==0){ // if the i vertex is isloated vertex findCircle(M, i+1, 0); } return true; } // delete all edge of current vertex public static void deleteVertexAndEdge(int[][] M, int i) { for (int t = 0; t < n; t++) { M[t][i] = -1; M[i][t] = -1; } } public static boolean isDelete(int[][] M, int i) { for (int t = 0; t < n; t++) { if (M[t][i] != -1) { return false; } } return true; }