/*图遍历的源代码

通过邻接矩阵的方式来保存给结点的值,再通过边的连接形成一个图。

验证深度优先搜索、广度优先搜索。

*/

#include "stdafx.h"
#include<iostream>
#include<queue>
#include<stack>
#include<stdlib.h>
#define MAX 100
using namespace std;typedef struct
{int edges[MAX][MAX];    //邻接矩阵int n;                  //顶点数int e;                  //边数
}MGraph;bool visited[MAX];          //标记顶点是否被访问过
//清空图的标志
void Init(MGraph G)
{int i,j;for(i=0;i<G.n;i++)       //初始化
    {for(j=0;j<G.n;j++){G.edges[i][j]=0;}visited[i]=false;}
};
void creatMGraph(MGraph &G)    //用引用作参数
{int i;int s,t;                 //存储顶点编号int v;                   //存储边的权值
    Init(G);for(i=0;i<G.e;i++)      //对矩阵相邻的边赋权值
    {scanf("%d %d %d",&s,&t,&v);   //输入边的顶点编号以及权值G.edges[s][t]=v;}
}void DFS(MGraph G,int v)      //深度优先搜索
{static int k=0;int i;if(k==0){printf("递归深度优先搜索:");k++;}printf("%d ",v);          //访问结点vvisited[v]=true;for(i=0;i<G.n;i++)       //访问与v相邻的未被访问过的结点
    {if(G.edges[v][i]!=0&&visited[i]==false){DFS(G,i);}}
}void DFS1(MGraph G,int v)   //非递归实现
{Init(G);stack<int> s;static int k=0;if(k==0){printf("非递归深度优先搜索:");k++;}printf("%d ",v);        //访问初始结点visited[v]=true;s.push(v);              //入栈while(!s.empty()){int i,j;i=s.top();          //取栈顶顶点for(j=0;j<G.n;j++)  //访问与顶点i相邻的顶点
        {if(G.edges[i][j]!=0&&visited[j]==false){printf("%d ",j);     //访问visited[j]=true;s.push(j);           //访问完后入栈break;               //找到一个相邻未访问的顶点,访问之后则跳出循环
            }}if(j==G.n)                   //如果与i相邻的顶点都被访问过,则将顶点i出栈
            s.pop();}
}void BFS(MGraph G,int v)      //广度优先搜索
{Init(G);queue<int> Q;             //STL模板中的queuestatic int k=0;if(k==0){printf("广度优先搜索:");k++;}printf("%d ",v);visited[v]=true;Q.push(v);while(!Q.empty()) {int i,j;i=Q.front();         //取队首顶点
        Q.pop();for(j=0;j<G.n;j++)   //广度遍历
        {if(G.edges[i][j]!=0&&visited[j]==false){printf("%d ",j);visited[j]=true;Q.push(j);}}}
}int main(void)
{int n,e;    //建立的图的顶点数和边数while(scanf("%d %d",&n,&e)==2&&n>0){MGraph G;G.n=n;G.e=e;creatMGraph(G);DFS(G,0);printf("\n");DFS1(G,0);printf("\n");BFS(G,0);printf("\n");}return 0;
}

转载于:https://www.cnblogs.com/gd-luojialin/p/8509520.html

22-1图的遍历的源代码相关推荐

  1. 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)

    本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...

  2. 图的遍历(Java)构造器

    图的遍历 一.DFS(Depth First Search) 概念: 从初始访问点出发,访问其第一个邻接节点:然后把这个邻接节点作为初始节点,继续访问它的第一个邻接节点. 即每次都在访问完当前节点过后 ...

  3. 实验四 图的遍历算法设计与实现

    一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第 ...

  4. 数据结构7.3_图的遍历

    我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次. 这一过程就叫做图的遍历. 图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 然而,图的遍历要比树的遍历复杂 ...

  5. 洛谷P1434滑雪(逆向图的遍历搜索递归+记忆化,最长路问题)

    题目链接:https://www.luogu.org/problemnew/show/P1434 刚开始最先想到的就是正向递归遍历,遍历所有情况方法,记录找到最长的,正向递归遍历也不难写,但会超时. ...

  6. 图--广度优先遍历/深度优先遍历(c语言实现)

    //不能通过编译,没有引入队列头文件 1 #include<stdlib.h> 2 #define MAX_VERTEX_NUM; 3 typedef int infoType; 4 ty ...

  7. 数据结构(12)----图(遍历、最小生成树、easyX可视化)

    从图的某一顶点出发访问遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph). 深度优先遍历(Depth_Frist_Search),也有称为深度优先搜 ...

  8. 数据结构(廿五) -- C语言版 -- 图 - 图的遍历 -- 邻接矩阵 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.概 述 二.深度优先遍历(DFS) 2.1.无向图的遍历过程 2.2.有向图的遍历过程 2.3.总结说明 2.4.实现源代码 三.广度优先遍历(BFS) 3.1.广度优先的 ...

  9. 图的遍历c语言数据结构实验报告,数据结构实验报告--图的遍历

    江 西 理 工 大 学 数据结构 实验报告 实验名称 图的遍历 日期 2014-12-01 专业班级 计算机(中加)131班 地点 信息学院621 实验人 王鹏伟 学号 同组人 单独完成 152013 ...

最新文章

  1. winform 安装部署
  2. vs2019中如何创建qt项目_VS2019创建新项目居然没有.NET Core3.0的模板?
  3. MFC的GDI绘制坐标问题
  4. Maven技巧和窍门:高级Reactor选项
  5. ubuntu创建wifi热点(android可识别)亲测可用
  6. (三)pscc学习笔记
  7. git pull VS git fetchmerge(good)
  8. Kaggle实战之一回归问题
  9. 机器学习(3)——有监督学习
  10. 语义分割标注工具Semantic Segmentation Editor 快速安装指南
  11. 三自由度机器人动力学(三个转动自由度+word报告+matlab代码)
  12. 戴尔台式机装linux系统,在戴尔(Dell)台式机上安装深度Deepin系统的BIOS设置方法...
  13. mobi格式文件解压实践
  14. python数据分析之pandas数据合并
  15. 杭电ACM-LCY算法进阶培训班-专题训练(计算几何入门)
  16. 联想台式计算机设置u盘启动不了,联想台式电脑设置bios时U盘、光盘都启动不了是怎么回事?...
  17. 亿美软通 短信接口整合(JAVA)
  18. dxc 3.0 线程的生命周期
  19. 《海底捞你学不会》探索管理的本质
  20. iOS小知识:开发者后台添加新的UDID之后,如何更新自动管理签名证书的设备描述文件(Provisioning Profiles)?

热门文章

  1. Android M(6.0) 权限相关
  2. Windows Server 2008 R2托管服务账户(MSA)的功能
  3. 计算机程序的构造和解释1构造过程抽象1.2过程与它们所产生的计算
  4. SVM支持向量机习题解答
  5. axios post object object_Vue前端开发——数据交互axios
  6. css编写加载页面动画效果
  7. 翁恺老师C语言学习笔记(七)函数
  8. 萌新的Python练习实例100例(二)根据企业的利润,计算企业的方法奖金
  9. intellij IDEA:Error : java 不支持发行版本xxx 的问题
  10. DeFi智能投顾Rari Capital协议已产生超165000美元费用