图的搜索(深度搜索)
来源:互联网 发布:福利app软件论坛 编辑:程序博客网 时间:2024/06/01 07:47
注意:广度搜索需要的是队列
深度搜索需要的是栈
package d19图的搜索;//顶点类public class Vertex { public char label; public boolean wasVisited; public Vertex (char label){ this.label = label; }}
package d19图的搜索;import d03栈和队列.MyStack;//图public class Graph { //顶点数组 private Vertex[] vertexList; //临界矩阵 private int [] [] adjMat; //顶点的最大数目 private int maxSize=20; //栈 private MyStack stack; //当前节点 private int nVertex; public Graph(){ vertexList = new Vertex[maxSize]; adjMat = new int [maxSize][maxSize]; for(int i = 0;i<maxSize;i++){ for(int j = 0;j<maxSize;j++){ adjMat[i][j]=0; } } nVertex=0; stack = new MyStack(); } //添加顶点 public void addVertex (char label){ vertexList[nVertex++]=new Vertex(label); } //添加边 public void addEdge(int start,int end){ adjMat[start][end]=1; adjMat[end][start]=1; } public int getadjUnvisitedVertex(int v){ for(int i = 0;i<nVertex;i++){ if(adjMat[v][i]==1&&vertexList[i].wasVisited==false){ return i; } } return -1; } //深度优先搜索 public void dfs(){ //首先访问0号顶点 vertexList[0].wasVisited=true; //压入栈种 stack.push(0); //显示该顶点 displayVertex(0); while(!stack.isEmpty()){ //获得一个为访问过的邻接点 int v = getadjUnvisitedVertex((int)stack.peel()); if(v==-1){ //弹出一个顶点 stack.pop(); }else{ vertexList[v].wasVisited=true; displayVertex(v); stack.push(v); } } //搜索完以后要将访问信息修改 for(int i = 0;i<nVertex;i++){ vertexList[i].wasVisited=false; } } public void displayVertex(int v){ System.out.print(vertexList[v].label+" "); }}
package d19图的搜索;public class TestGraph { public static void main(String[] args) { Graph g = new Graph(); g.addVertex('A'); g.addVertex('B'); g.addVertex('C'); g.addVertex('D'); g.addVertex('E'); g.addEdge(0, 1); g.addEdge(0, 3); g.addEdge(3, 4); g.dfs(); }}
阅读全文
0 0
- 图的搜索(深度搜索)
- 图的深度搜索
- 图的深度搜索和广度搜索
- 图的定义、广度搜索、深度搜索
- 图的深度搜索和广度搜索
- 图搜索算法(深度优先搜索、迭代加深的深度优先搜索、广度优先搜索、代价一致搜索、A*搜索)
- 图的深度优先搜索(邻接矩阵)
- 图的深度优先搜索(DFS)
- 图的遍历(深度优先搜索)
- 图的遍历(深度优先搜索)
- 图的深度(广度)优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- 图的深度优先搜索
- C++保留2位小数输出
- 关于std::promise的set_value_at_thread_exit
- 设备驱动模型的基石kobject
- unity .exe文件打开时跳过选择窗口界面的方式
- useradd用户命令详解
- 图的搜索(深度搜索)
- 2---MATLAB将十进制转换成二进制补码
- leetcode 223. Rectangle Area 矩形面积计算
- 欢迎使用CSDN-markdown编辑器
- js事件委托或事件代理
- C语言 通过指针访问一维数组的几种方式,通过数组名访问一维数组
- android、ios、php之间AES加密解密
- 初学Spring boot + mybatis-plus 配置
- 设备驱动模型之device