JAVA-图的深度优先遍历
来源:互联网 发布:levis淘宝推荐店铺 编辑:程序博客网 时间:2024/06/05 15:15
1、建立结点类
//结点public class Node { private String data; private boolean isVisited; public Node(String data) { this.data = data; } public String getData() { return data; } public void setData(String data) { this.data = data; } public boolean isVisited() { return isVisited; } public void setVisited(boolean isVisited) { this.isVisited = isVisited; }}
2、建一个类,存储图的数据
//数据源public class GraphData { // 邻接矩阵 public int[][] getMatrix() { // 1代表有边,0代表无边 int[][] matrix = { { 0, 1, 0, 1, 0, 0, 0, 0 }, { 1, 0, 1, 0, 0, 1, 0, 0 }, { 0, 1, 0, 0, 1, 0, 0, 0 }, { 1, 0, 0, 0, 0, 0, 1, 1 }, { 0, 0, 1, 0, 0, 1, 0, 0 }, { 0, 1, 0, 0, 1, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0 }, { 0, 0, 0, 1, 0, 0, 0, 0 } }; return matrix; } // 顶点标签 public String[] getNodeData() { String[] nodeData = { "A", "B", "C", "D", "E", "F", "G", "H" }; return nodeData; }}
3、深度优先遍历算法
//深度优先遍历import java.util.ArrayList;import java.util.List;public class DepthFirstTraverse { private List<Node> list = new ArrayList<Node>(); public void depthFirstTraverse(int nodeIndex) { GraphData gd = new GraphData(); // 邻接矩阵 int[][] matrix = gd.getMatrix(); // 顶点数据 String[] nodeData = gd.getNodeData(); // 结点列表 for (String data : nodeData) { list.add(new Node(data)); } // 取得传进来的结点下标对应的结点 Node node = list.get(nodeIndex); // 打印传进来的结点 System.out.print(node.getData() + " "); // 标记为已访问 node.setVisited(true); // 通过邻接矩阵判断当前结点是否与其他顶点有连接 for (int i = 0; i < matrix.length; i++) { int weight = matrix[nodeIndex][i]; // 若有边 if (weight != 0) { // 判断该点是否被访问过 if (list.get(i).isVisited()) { // 若被访问过,则pass掉,continue进入到下一次循环 continue; } else { // 若没被访问过,则调用当前函数进行递归 depthFirstTraverse(i); } } else { // 没有边,continue进入到下一次循环 continue; } } }}
4、测试
public class Test { public static void main(String[] args) { DepthFirstTraverse dft = new DepthFirstTraverse(); dft.depthFirstTraverse(0); }}
5、测试输出结果
阅读全文
0 0
- JAVA-图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- Java图的遍历(深度优先遍历、广度优先遍历)
- linux进行vi操作时的复制操作
- 对于垃圾回收相关的建议
- 【Firefox】【kaios】在gaia调用已有的webidl
- JAVA缓存技术
- Java编程思想之泛型
- JAVA-图的深度优先遍历
- 读取网页图片
- windows下挂载虚拟机下的linux目录实现复制粘贴访问---samba服务器使用
- 练习1-4 编写一个程序打印摄氏温度转换成相应华氏温度的转换表
- js学习笔记之购物车1
- matplotlib模块数据可视化-绘制柱状图
- Fragment之间消息传递
- 随机生成10个不重复的0-100的数字
- Win7下codeblocks12.11配置openCV2.3.1经过