上一篇文章中说道用邻接矩阵来实现深度优先搜索
这里我们来谈用邻接表来实现深度优先搜索
邻接表如下所示:
由于java中对于指针的使用弱化 这里我用list来模拟链表操作
import java.util.ArrayList;
import java.util.List;
/**
*
* @author zero
*
*/
public class adjTableDFS {
private List<Integer> visitList = new ArrayList<Integer>();
private List<List> nodeList = new ArrayList<List>();
private Boolean[] visitStatus = {false, false, false, false, false};
public void initNodeList() {
List list = new ArrayList();
list.add(new Node(2));
list.add(new Node(4));
nodeList.add(list);
list = new ArrayList();
list.add(new Node(3));
nodeList.add(list);
list = new ArrayList();
list.add(new Node(0));
list.add(new Node(1));
list.add(new Node(4));
nodeList.add(list);
list = new ArrayList();
list.add(new Node(0));
list.add(new Node(4));
nodeList.add(list);
list = new ArrayList();
list.add(new Node(0));
nodeList.add(list);
}
public void dfsSerach(List list) {
for(int i = 0; i<list.size(); i++) {
Node node = (Node) list.get(i);
int num = node.data;
if(visitStatus[num] == false) {
visitList.add(node.data);
visitStatus[num] = true;
dfsSerach(nodeList.get(num));
}else {
}
}
}
public void outSortedResult() {
System.out.print("The sorted result is : ");
for(int i=0; i<visitList.size(); i++) {
System.out.print(visitList.get(i) + " ");
}
}
public void setInitNode(int num) {
visitList.add(num);
visitStatus[num] = true;
dfsSerach(nodeList.get(0));
}
public static void main(String[] args) {
adjTableDFS atdfs = new adjTableDFS();
atdfs.initNodeList();
atdfs.setInitNode(0);
atdfs.outSortedResult();
}
}
class Node {
int data;
public Node(int data) {
this.data = data;
}
}
输出的结果为:
The sorted result is : 0 2 1 3 4