深度优先遍历(DFS)
来源:互联网 发布:淘宝9888 编辑:程序博客网 时间:2024/05/16 17:32
<img src="http://img.blog.csdn.net/20160315122918036?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="bottom" alt="" />public class deepTravel {public static void main(String[] args) {//顶点之间的关系(图),1表示连接,0表示不连接int[][] a={{0,1,1,1,0},{1,0,1,1,1},{1,1,0,0,0},{1,1,0,0,0},{0,1,0,0,0}};//记录染色信息int[] color = new int[a.length];//调用深度优先遍历函数deeptravel(a,color,0);}private static void deeptravel(int[][] a, int[] color, int i) {//输出当前遍历到的顶点System.out.println(i);//对当前的顶点进行染色color[i]=1;//遍历第i行的顶点for(int k = 0;k<a[i].length;k++){//判断当前顶点是否与第i行的第k个顶点是否连接//同时判断第i行的第k个顶点是否染色,也就是是否遍历过if(a[i][k] == 1 && color[k] == 0){//两个条件成立,则递归顶点deeptravel(a,color,k);}}}}
例子:迷宫问题
import java.util.HashSet;import java.util.Set;public class maze {private char[][] data;private Pos entry;private Pos exit;private Set solve = new HashSet();class Pos {int i;int j;public Pos(int x, int y) {i = x;j = y;}public int hashCode() {return i * 1000 + j;}public boolean equals(Object x) {if (x instanceof Pos == false) {return true;}Pos p = (Pos) x;return p.i == i && p.j == j;}}private boolean go(Pos cur, Set path) {if (cur.equals(exit))return true;path.add(cur);Pos[] t = { new Pos(cur.i, cur.j - 1),// 上new Pos(cur.i, cur.j + 1),// 下new Pos(cur.i - 1, cur.j),// 左new Pos(cur.i + 1, cur.j) // 右};for (int i = 0; i < t.length; i++) {try {if (data[t[i].i][t[i].j] != '#' && path.contains(t[i]) == false) {if (go(t[i], path)) {solve.add(cur);return true;}}} catch (Exception e) {}}return false;}private void go() {Set path = new HashSet();solve = new HashSet();go(entry, path);}private void show() {for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {char c = data[i][j];if (c == '.' && solve.contains(new Pos(i, j)))c = 'x';System.out.print(c + "");}System.out.println();}}private void getStdInput() {String[] x = { "####B#######", "####....####", "####.####..#","#....#####.#", "#.#####.##.#", "#.#####.##.#", "#.##.......#","#.##.###.#.#", "#....###.#.#", "##.#.###.#.A", "##.###...###","############" };data = new char[x.length][];for (int i = 0; i < data.length; i++) {data[i] = x[i].toCharArray();for (int j = 0; j < data[i].length; j++) {if (data[i][j] == 'A')entry = new Pos(i, j);if (data[i][j] == 'B')exit = new Pos(i, j);}}}public static void main(String[] arg) {maze a = new maze();a.getStdInput();a.show();a.go();System.out.println("----------------");a.show();}}
0 0
- 深度优先遍历DFS
- DFS-深度优先遍历
- DFS深度优先遍历
- 深度优先遍历(DFS)
- DFS 深度优先遍历
- 深度优先遍历!!DFS
- DFS 深度优先遍历
- 深度优先遍历DFS
- DFS深度优先搜索遍历
- 深度优先遍历(DFS)和广度优先遍历(BFS)
- 图论基础-深度优先遍历DFS
- 深度优先遍历(搜索)(DFS)
- 数据结构(二) 深度优先遍历 DFS
- DFS深度优先遍历算法简单分析
- LeetCode 之 DFS 深度优先遍历
- 图的遍历---深度优先搜索(DFS)
- DFS 图的深度优先遍历
- 如何实现深度优先遍历(DFS)
- C++中的struct和class的区别
- bzoj 1041: [HAOI2008]圆上的整点 【数学 思维】
- java数据库查询显示结果显示在JTable
- Codeforces 627B Factory Repairs 线段树
- 开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
- 深度优先遍历(DFS)
- 后台性能测试总结—测试准备篇
- 剑指offer-和为S的两个数字
- iOS开发小技巧
- 为什么MVC不是一种设计模式?
- Android四大组件深度解析
- 转载NSPredicate 筛选查询匹配
- Java设计模式—生产者消费者模式(阻塞队列实现)
- 项目的可交付成果有哪些?具备什么特性?