package ctong;
import java.util.Arrays;
import java.util.Random;
public class Graph_DFS {
private static int[] color;
private static int count = 0;
public void DFS_visit(int[][] array,int n){
color[n]=1;
System.out.println(Arrays.toString(color));
for(int i = n;i<array.length;i++){
for(int j = 0;j<array.length;j++){
if(array[n][j]==1){
if(color[j]==0){
DFS_visit(array,j);
}
}
}
}
color[n]=2;
System.out.println(Arrays.toString(color));
}
public Graph_DFS(int[][] graph){
for(int i = 0;i<graph.length;i++){
color[i]=0;
}
for(int j = 0;j<graph.length;j++){
if(color[j]==0){
count++;
DFS_visit(graph,j);
}
}
}
public static void main(String[] args) {
int[][] map1 = new int[][]{ {0,1,0},
{1,0,0},
{0,0,0},
};
int[][] map = new int[][]{ {0,1,0,0,0,0},
{1,0,0,0,0,0},
{0,0,0,1,0,0},
{0,0,1,0,0,0},
{0,0,0,0,0,1},
{0,0,0,0,1,0}};
int[][] map2 = createRandomBArray();
print(map2);
System.out.println("随机创建的2维数组中,行号和列号表示2个节点,它们对应的数据表示它们的连接情况,0表示这两个节点未连通,1表示这两个节点连通");
color = new int[map2.length];
System.out.println("无向图的深度优先搜索:");
new Graph_DFS(map2);
System.out.println("连通图个数为:"+count);
}
private static int[][] createRandomBArray() {
Random ra= new Random();
int n = ra.nextInt(5)+4;
int[][] Barray= new int[n][n];
for(int k = 0;k<n;k++){
Barray[k][k]=0;
}
for(int i = 0 ;i<n;i++){
for(int j = 0 ;j<n;j++){
if(i!=j){
if(j>i){
if(Math.random()<0.5)
Barray[i][j]= 1;
else Barray[i][j]= 0;
}else Barray[i][j]=Barray[j][i];
}
}
}
return Barray;
}
public static void print(int[][] c){
for(int i=0;i<c.length;i++ ){
for(int j=0;j<c.length;j++ ){
if(c[i][j]==0)
System.out.print(c[i][j]+"\t");
else
System.out.print(c[i][j]+"\t");
}
System.out.println();
}
}
}