java.手写图邻接矩阵并深度优先遍历
·
package 算法;
public class GraphDfs2 {
private int vertices;
///先是邻接矩阵法
private int[][] adjArry;
public GraphDfs2 (int vertices){
this.vertices=vertices;
// this.adjArry=adjArry[vertices+1][vertices+1];
this.adjArry=new int[vertices+1][vertices+1];
}
//二维数组建好之后,建立联系
public void addEdge(int i,int j){
adjArry[i][j]=1;
adjArry[j][i]=1;
}
//遍历
public void dfs(int start){
System.out.println("遍历结果是:");
boolean[] visit=new boolean[vertices+1];
dfsUtil(start,visit);
}
public void dfsUtil(int i,boolean[] visit){
visit[i]=true;
System.out.print(i+" ");
//我一开始把打印输出加到for循环里面了,导致少一个数
for(int j=1;j<=vertices;j++){
if(adjArry[i][j]==1&&!visit[j]){
//System.out.print(i+" ");
dfsUtil(j,visit);
//dfsUtil(j,visit[j]);
//不需要再加个【】
}
}
}
public void printGraph(){
for(int i=1;i<=vertices;i++){
for(int j=1;j<=vertices;j++){
System.out.print(adjArry[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args) {
//建立一个对象
GraphDfs2 graph=new GraphDfs2(6);
graph.addEdge(1,2);
graph.addEdge(1,5);
graph.addEdge(2,3);
graph.addEdge(2,4);
graph.addEdge(3,6);
graph.addEdge(4,5);
graph.addEdge(4,6);
graph.printGraph();
graph.dfs(1);
}
}
更多推荐


所有评论(0)