詳細的代碼可見github:
https://github.com/AbitGo/myClassWork/tree/master/workspace_ds
如何實現圖的深度優先搜索算法
詳細代碼實現:
package com.company.ch6;
import com.company.ch3.queue.LinkSqeue;
public class GraphFS {
private static boolean[] visited;
//深度優先搜索算法的實現
public static void DFSTraverse(IGraph g)throws Exception{
visited = new boolean[g.getVexNum()];
for (int v = 0; v < g.getVexNum(); v++) {
visited[v] = false;
}
for (int v = 0; v < g.getVexNum(); v++) {
//如果當前沒被訪問
if (visited[v] == false) {
DFS(g,v);
}
}
System.out.println();
}
public static void DFS(IGraph g,int v) throws Exception {
//該節點已經被訪問過了
visited[v]=true;
System.out.print(g.getVex(v).toString()+" ");
for(int w = g.firstAdjVex(v);w>=0;w=g.nextAdjVex(v,w)){
if(!visited[w]){
DFS(g,w);
}
}
}
}
測試類:
package com.company.ch6;
public class MGraphTest {
public static void main(String[] args) throws Exception {
//無向圖
Object[] param1_1_1= {"UDN",5,5,"ABCDE"};
String[] param1_1_2 = {"AB1","BC2","AD3","AE4","CE5"};
MGraph mGraph1 = new MGraph();
mGraph1.createGraph(param1_1_1,param1_1_2);
GraphFS.BFSTraverse(mGraph1);
GraphFS.DFSTraverse(mGraph1);
//有向圖
Object[] param1_2_1= {"UDN",5,5,"ABCDE"};
String[] param1_2_2 = {"AB1","BC2","AD3","AE4","CE5"};
MGraph mGraph2 = new MGraph();
mGraph2.createGraph(param1_2_1,param1_2_2);
GraphFS.BFSTraverse(mGraph2);
GraphFS.DFSTraverse(mGraph2);
}
}
測試結果:
"C:\Program Files\Java\jdk1.8.0_101\bin\java.exe"
創建無向網
A B D E C
A B C E D
創建無向網
A B D E C
A B C E D