图---邻接表的深度搜索与广度搜索测试一
来源:互联网 发布:工业设计用什么软件 编辑:程序博客网 时间:2024/05/18 17:43
import java.util.LinkedList;import java.util.Queue;//线链class Line {int index; // 顶点下标Line nextLine;}// 节点class Point {String name;boolean isVisit;Line firstLine;public Point(String name) {this.name = name;}}public class GraphLink {static final int LENGTH = 10;Point[] points;int curLength;public GraphLink() {points = new Point[LENGTH];}void addPoint(Point point) {points[curLength++] = point;}void addLine(int x, int y) {Line line = new Line();line.index = y;line.nextLine = points[x].firstLine;points[x].firstLine = line;Line line2 = new Line();line2.index = x;line2.nextLine = points[y].firstLine;points[y].firstLine = line2;} private void initPoints() { for (int i = 0; i < curLength; i++) { points[i].isVisit = false; } } /** * 深度搜索 * A节点开始,循环A的线链,如果下一个节点F,未被访问,就递归到节点F的线链, * 如果下一个节点已经被访问过,就把A的线链指向再下一个节点C,直到没后继节点为止 */public void dfs() {for(int i = 0; i < curLength; i++){Point point = points[i];showPoint(point);} initPoints();}private void showPoint(Point point) {if(!point.isVisit){showName(point.name); showNbsp();point.isVisit = true;}Line line = point.firstLine;while(line != null){Point p = points[line.index];if(!p.isVisit){showPoint(p);}line = line.nextLine;}} /** * 广度搜索 * 循环各个节点的线链 */ private void bfs() { Queue<Integer> queue = new LinkedList<Integer>(); for (int i = 0; i < curLength; i++) { Point point = points[i]; if(!point.isVisit){ queue.add(i); showName(point.name); showNbsp(); while (!queue.isEmpty()){ Point _point = points[queue.peek()]; _point.isVisit = true; Line line = _point.firstLine; while (line != null){ Point p = points[line.index]; if(!p.isVisit){ showName(p.name); showNbsp(); p.isVisit = true; queue.add(line.index); } line = line.nextLine; } queue.poll(); } } } initPoints(); } /** * 最小生成树 * 区别是打印当前节点 */ public void mfs() { for (int i = 0; i < curLength; i++) { Point point = points[i]; showPointMfs(point); } initPoints(); } private void showPointMfs(Point point) { if (!point.isVisit) { point.isVisit = true; } Line line = point.firstLine; while (line != null) { Point p = points[line.index]; if (!p.isVisit) { showName(point.name); showName(p.name); showNbsp(); showPointMfs(p); } line = line.nextLine; } } public void showNbsp() { System.out.print(" "); } private void showName(String name) {System.out.print(name);}public static void printLn(String name) {System.out.println("");System.out.println(name);}public static void main(String[] args) {GraphLink g = new GraphLink();for (int i = 65; i <= 70; i++) {char c = (char) i;Point point = new Point(c + "");g.addPoint(point);}g.addLine(0, 1); // abg.addLine(0, 2); // acg.addLine(0, 5); // afg.addLine(1, 3); // bdg.addLine(2, 3); // cdg.addLine(2, 4); // ceg.addLine(3, 4); // deprintLn("深度搜索:");g.dfs(); printLn("广度搜索:"); g.bfs(); printLn("最小生成树:"); g.mfs();}}
- 图---邻接表的深度搜索与广度搜索测试一
- 图---邻接表的深度搜索与广度搜索测试一
- 图---邻接表的深度搜索与广度搜索测试一
- 图---邻接矩阵的深度搜索与广度搜索测试一
- 图---邻接矩阵的深度搜索与广度搜索测试一
- 图---邻接矩阵的深度搜索与广度搜索测试一
- 图的广度与深度搜索(邻接链表)
- 图的深度、广度优先搜索(邻接表)
- 图深度优先搜索广度优先搜索,邻接表
- 图的邻接表表示法及深度搜索与广度搜索
- 图的基本操作:图的创造(基于邻接表)、深度搜索(DFS)、广度搜索(DFS)
- 图的邻接表的创建以及深度搜索和广度搜索
- 图的深度优先搜索/广度优先搜索(邻接表实现)
- 图的广度优先搜索(邻接表)
- 图的邻接表表示、广度优先、深度优先搜索
- 邻接表 邻接矩阵 广度优先搜索 深度优先搜索
- 基于邻接表的图的深度和广度优先搜索遍历
- 图基本算法 图搜索基于邻接表的(广度优先、深度优先)
- UIScrollView的属性总结
- 原创) Hibernate中cascade与inverse属性详解
- Pager-taglib分页
- shell脚本知其一二
- 第十三项目三:CEmployee类继承自CPerson类
- 图---邻接表的深度搜索与广度搜索测试一
- Add Binary
- 最字头之一:最长公共子序列
- 在switch-case中定义变量时当心被“穿越”
- MiniGUI原理分析
- 代理抓取网页
- POJ 3273 Monthly Expense
- 自我情绪控制的方法(数颜色,运动,音乐,回忆法)
- 三层架构之系统登陆实例