对于邻接矩阵表示的图做深度优先搜索用递归的方式实现起来代码简介,也好说明问题。递归函数是:
void DFSM(MGraph *G,int i)
{
int j;
printf("深度优先遍历结点: 结点%c/n",G->vexs[i]); //访问顶点vi
visited[i]=TRUE;
for(j=0;j<G->n;j++) //依次搜索vi邻接点
if(G->edges[i][j]==1 && !visited[j])
DFSM(G,j);
}
堆栈实现就是起到代替程序在执行递归时底层保存函数状态的作用。需要保存的状态一个是i,一个j,因此堆栈实现的深度优先搜索的流程图如下:
具体函数代码如下:
public void traverseDfs(int v) {
boolean[] visited = new boolean[vertexlist.length()];
VertexStack stack1 = new VertexStack();
VertexStack stack2 = new VertexStack();
int i, j = 0, k;
i = vertexlist.findData(v);
k = i;
System.out.println("访问[" + i + "," + j + "]:" + v);
visited[i] = true;
while (true) {
while (j < vertexlist.length()
&& (adjmatrix[i][j] == 0 || visited[j])) {
System.out.println("路过[" + i + "," + j + "]:" + v);
j++;
}
if (i == k && j == vertexlist.length()) {
break;
}
if (j == vertexlist.length()) {
i = stack1.pop();
j = stack2.pop();
continue;
}
v = vertexlist.getData(j);
System.out.println("访问[" + i + "," + j + "]:" + v);
visited[j] = true;
stack1.push(i);
stack2.push(j);
i = j;
j = 0;
}
}
分享到:
相关推荐
-------用邻接矩阵构造带权有向图-------- --------------最短路径--------------- --------用邻接表构造有向图--------- b c d e e d e ---------初始时各个顶点的入度值--------- 0 1 1 2 3 0 ---------拓扑排序-...
通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表、单向链表、循环链表、栈的基本概念、链式堆栈、中缀表达式、队列、链式队列、串、MyString、Brute-Force算法、MySet类实现、矩阵类、递归算法、哈夫曼...
广度优先搜索法--邻接矩阵.cpp 回文判断--队列.cpp 回文判断--栈.cpp 树的遍历--递归算法.cpp 树的遍历--非递归算法(先序).cpp 树的遍历--非递归算法(中序).cpp 约瑟夫环--链表.cpp 约瑟夫环--数组.cpp 折半查找...
范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-...
范例1-102 图的邻接矩阵存储表示 ∷相关函数:CreateFAG函数 CreateDG函数 1.7.2 图的邻接表存储表示 324 范例1-103 图的邻接表存储表示 324 ∷相关函数:CreateFAG函数 1.7.3 有向图的十字链表存储表示 335 范例1-...
将若干结点组成的有向图用邻接矩阵存入计算机,并深度遍历输出该图
本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...
4、用邻接矩阵或邻接图实现一个有向图的存储,并实现单源最短路径算法的实现(这个类的一个成员函数),并能输出该图的关键路径。 注:1、要用面向对象的方法设计代码; 2、一个图是一个类的实例; 3、类...
12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...
本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...
12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...
12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的...
本书在简要回顾了基本的C++ 程序设计概念的基础上,全面系统地介绍了队列、堆栈、树、图等基本数据结构,以及贪婪算法、分而治之算法、分枝定界算法等多种算法设计方法,为数据结构与算法的继续学习和研究奠定了一...
12.8.2 邻接矩阵的遍历函数 387 12.8.3 邻接链表的遍历函数 388 12.9 语言特性 389 12.9.1 虚函数和多态性 389 12.9.2 纯虚函数和抽象类 391 12.9.3 虚基类 391 12.9.4 抽象类和抽象数据类型 393 12.10 图的搜索算法...
| DAG 的深度优先搜索标记 3 | 无向图找桥 3 | 无向图连通度(割) 3 | 最大团问题 DP + DFS 3 | 欧拉路径 O(E) 3 | DIJKSTRA 数组实现 O(N^2) 3 | DIJKSTRA O(E * LOG E) 4 | BELLMANFORD 单源最短路 O(VE) ...