您的位置:首页 > 其它

基于邻接表实现的DFS深度优先搜索

2015-04-13 20:47 483 查看
上一篇文章中说道用邻接矩阵来实现深度优先搜索

这里我们来谈用邻接表来实现深度优先搜索



邻接表如下所示:



由于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: