查寻无向图中的环

查找无向图中的环
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;
	}