首页 > 其他 > 详细

算法起步之深度优先搜索

时间:2014-02-24 07:03:31      阅读:314      评论:0      收藏:0      [点我收藏+]
原文:算法起步之深度优先搜索

       说完广度优先搜索后,我们来看图的另一种遍历形式,深度优先搜索算法,深度优先总是对刚发现的节点的出阿发边进行探索,直到该节点的所有出发边都被发现为止。一旦所有的出发边都被发现,搜索就回溯到前驱结点,来搜索前驱结点的出发边。反复进行直到全部遍历。我们用递归跟栈两种方式进行实现,其实归根到底递归也是栈实现的。

bubuko.com,布布扣

       递归实现:

 

public class DFS {
	
	private boolean[] visited;
	public void dfs(int[][]map){
		visited=new boolean[map.length];
		for (int i = 0; i < visited.length; i++) {
			if (!visited[i]) {
				core(map, i);
			}
		}
	}

	public void core(int[][]map,int node){
		System.out.println(node);
		visited[node]=true;
		for (int i = 0; i < visited.length; i++) {
			if (map[node][i]==1&&!visited[i]) {
				core(map,i);
			}
		}
		}
}

       栈实现:

private LinkedList list=new LinkedList();
	private boolean[] visited;
	public void dfs(int[][] map){
		visited=new boolean[map.length];
		for (int i = 0; i < visited.length; i++) {
			if (!visited[i]) {
				list.addLast(i);
				while (!list.isEmpty()) {
					int now=(Integer) list.getLast();
					visited[now]=true;
					System.out.println(now);
					int link=getlink(map, now);
					if (link!=-1) {
						list.add(link);
					}else {
						list.removeLast();
					}
				}
			}
			
			
			
		}
		
	}
	public int getlink(int[][]map,int node){
		for (int i = 0; i < map.length; i++) {
			if (map[node][i]==1&&!visited[node]) {
				return i;
			}
		}
		return -1;
	}
友情提示:转载请注明出处【作者:idlear  博客:http://blog.csdn.net/idlear

算法起步之深度优先搜索

原文:http://www.cnblogs.com/lonelyxmas/p/3562002.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!