算法起步之深度优先搜索

原文: 算法起步之深度优先搜索

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

算法起步之深度优先搜索

       递归实现:

 

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
上一篇:Pandas高级教程之:Dataframe的合并


下一篇:hdu 3038D - How Many Answers Are Wrong [kuangbin带你飞]专题五 并查集