图的遍历(递归非递归方法)

#include<iostream>
#include<stdio.h>
#include<stack>
#include<queue>
using namespace std;typedef char VertexType;
typedef int EdgeType;#define MAXVEX 100
#define INF 65535
bool visited[MAXVEX] ;typedef struct Graph
{VertexType vexs[MAXVEX];   //顶点表EdgeType arc[MAXVEX][MAXVEX]; // 邻接矩阵,边表int vexnum, arcnum;           //图的当前顶点数和弧数
}MGraph;void CreateGraph(MGraph* Graph)
{cout << "请输入顶点数和边数:"<<endl;cin >> Graph->vexnum >> Graph->arcnum;//请输入顶点cout << "请输入顶点" << endl;for (int i = 0; i < Graph->vexnum; i++){cin >> Graph->vexs[i];}//初始化邻接矩阵for (int i = 0; i < Graph->vexnum; i++){for (int j = 0; j < Graph->vexnum; j++){Graph->arc[i][j] = INF;}}//输入边cout << "请输入边:" << endl;for (int i = 0; i < Graph->arcnum; i++){int x, y, v;cin >> x >> y >> v;Graph->arc[x][y] = v;Graph->arc[y][x] = v;}}void print_graph(MGraph* G)
{for (int i = 0; i < G->vexnum; i++){for (int j = 0; j < G->vexnum; j++){cout << G->arc[i][j] << "\t";}cout << "\n";}}//深度遍历(递归)
void DFS(const MGraph* G, int i)
{visited[i] = true;cout << i << "\t";for (int j = 0; j < G->vexnum; j++){if (!visited[j] && G->arc[i][j] != INF ){DFS(G, j);}}
}//深度遍历(非递归)
void DFS01(const MGraph* G, int i)
{visited[i] = true;stack<int> s;s.push(i);while (!s.empty()){i = s.top();s.pop();cout << i << "\t";for (int j = 0; j < G->vexnum; j++){if (!visited[j] && G->arc[i][j] != INF){visited[j] = true;s.push(j);}}}}//广度遍历
void BFS(const MGraph* G, int i)
{queue<int> Q;Q.push(i);visited[i] = true;while (!Q.empty()){//出队列i = Q.front();Q.pop();cout << i << "\t";//入队列for (int j = 0; j < G->vexnum; j++){if (!visited[j] && G->arc[i][j] != INF){visited[j] = true;Q.push(j);}}}}
int main()
{MGraph* G = new MGraph;CreateGraph(G);print_graph(G);BFS(G, 0);}

数据结构(七)图的遍历(递归非递归方法)相关推荐

  1. 数据结构(六)二叉树的遍历(递归非递归方法)

    数据结构(六)二叉树的遍历(递归非递归方法) 一.递归方法 1.先序遍历 void PreOrder(BiTree T) {visit(T);PreOrder(T->LChild)PreOrde ...

  2. 数据结构二叉树中序遍历递归和非递归算法

    2022.11.19 二叉树中序遍历递归和非递归算法 任务描述 相关知识 编程要求 测试说明 C/C++代码 任务描述 本关任务:给定一棵二叉树,使用递归和非递归的方法实现二叉树的中序遍历结果. 相关 ...

  3. 【数据结构】图的遍历(BFS和DFS)

    图的遍历 图的遍历是指从图中的某一顶点出发,按照某种搜索方式沿着途中的边对图中所有顶点访问一次且仅访问一次.图的遍历主要有两种算法:广度优先搜索和深度优先搜索. 广度优先遍历BFS 广度优先遍历(BF ...

  4. c++ 遍历list_数据结构之图的遍历,一篇文章get全部考点

    图的概念 举个例子,假设你的微信朋友圈中有若干好友:张三.李四.王五.赵六.七大姑.八大姨. 而你七大姑的微信号里,又有若干好友:你.八大姨.Jack.Rose. 微信中,许许多多的用户组成了一个多对 ...

  5. 二叉树的前序遍历、中序遍历、后序遍历(递归+非递归实现)

    目录 前序遍历 递归实现 非递归实现 中序遍历 递归实现 递归实现 后序遍历 递归实现 非递归实现 二叉树是一种非常经典的数据结构,它的应用途径十分广泛,但同时它也是一种简单的.易理解的数据结构,解决 ...

  6. 二叉树遍历的非递归方法

    https://blog.csdn.net/qiuxinfa123/article/details/84880786 2.先序遍历.非递归先序遍历的思路如下: 1.先将根节点入栈 2.访问根节点 3. ...

  7. 数据结构之图的遍历:深度优先遍历(DFS)

    图的遍历:深度优先遍历 思维导图: 深度优先遍历的原理: 深度优先遍历的代码实现: 深度优先遍历的性能: 深度优先生成树: 遍历与连通性的关系: 思维导图: 深度优先遍历的原理: ps: 实现方法是递 ...

  8. 数据结构之图的遍历:广度优先遍历(BFS)

    图的遍历:广度优先遍历 思维导图: 广度优先遍历的原理: 广度优先遍历的代码实现: 广度优先遍历的性能分析: 无权图单源最短路径问题: 广度优先生成树: 思维导图: 广度优先遍历的原理: 类似与树的层 ...

  9. 图的遍历递归和非递归实现

    因为深度优先需要无路可走时按照来路往回退,正好是后进先出广度优先则需要保证先访问顶点的未访问邻接点先访问,恰好就是先进先出 广度不能用递归   图的广度优先搜索确实没法使用递归,但上面那句话也确实是理 ...

最新文章

  1. 记selenium1.0升级到selenium2.0
  2. R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离)
  3. 要学习机器学习,先从这十大算法开始吧
  4. 开发日记-20190507 关键词 java通过id直接操作视图
  5. 20145307《信息安全系统设计基础》课程总结
  6. Java基础实战Bank项目01-04
  7. ORA-32004 参数设置过时的解决办法
  8. Flutter进阶第2篇:Dio库实现网络请求以及动态渲染数据
  9. Atitit.api参数传递的设计
  10. 联想笔记本关闭锁定计算机,联想笔记本电脑键盘锁了怎么解开
  11. 点扩散函数3D曲面绘图方法
  12. 关于马尔科夫链的期望收益在matlab中的实现
  13. ZeroMQ史上最全的知识总结(一):常见的通讯模式
  14. android修改图标
  15. 苹果延长13英寸MacBook Pro背光维修计划
  16. 关于 RT-Thread 内核调度算法中 __rt_ffs函数为什么要检测 value值是否为0的疑问
  17. java判断生日_java根据生日判断生日和星座
  18. lacp - 链路汇聚控制协议
  19. 上市公司控股股东的条件
  20. 铁路行李随车托运办理

热门文章

  1. canvas 图片反色
  2. 双足机器人简单步态生成
  3. python基础(一)简单入门
  4. javaScript转换日期合格式
  5. file_get_content和curl的性能比较
  6. 深入研究Clang(四) Clang编译器的简单分析
  7. openlayer调用geoserver发布的地图实现地图的基本功能
  8. finditerable 转list_java – 通过拆分和运行将ListenableFuture转换为Iterable
  9. android 字符串反转,Golang之字符串操作(反转中英文字符串)
  10. android仿高德地图透明黑字,Android 仿高德地图可拉伸的BottomSheet