22-1图的遍历的源代码
/*图遍历的源代码
通过邻接矩阵的方式来保存给结点的值,再通过边的连接形成一个图。
验证深度优先搜索、广度优先搜索。
*/
#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图的遍历的源代码相关推荐
- 【数据结构笔记22】图的遍历例题:拯救007(应用DFS)、六度空间(应用BFS)
本次笔记内容: 6.3 应用实例:拯救007 6.4 六度空间 文章目录 拯救007 题目与分析 题目 分析 总体算法 六度空间(Six Degrees of Separation) 题目 算法思路 ...
- 图的遍历(Java)构造器
图的遍历 一.DFS(Depth First Search) 概念: 从初始访问点出发,访问其第一个邻接节点:然后把这个邻接节点作为初始节点,继续访问它的第一个邻接节点. 即每次都在访问完当前节点过后 ...
- 实验四 图的遍历算法设计与实现
一.实验名称:图的遍历算法设计与实现 二.实验目的: 1.掌握图的深度优先遍历的算法. 2.掌握图的广度优先遍历的算法. 3.实验章节:算法设计与分析 第四章 三.实验内容.实验问题和程序运行结果 第 ...
- 数据结构7.3_图的遍历
我们希望从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次. 这一过程就叫做图的遍历. 图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础. 然而,图的遍历要比树的遍历复杂 ...
- 洛谷P1434滑雪(逆向图的遍历搜索递归+记忆化,最长路问题)
题目链接:https://www.luogu.org/problemnew/show/P1434 刚开始最先想到的就是正向递归遍历,遍历所有情况方法,记录找到最长的,正向递归遍历也不难写,但会超时. ...
- 图--广度优先遍历/深度优先遍历(c语言实现)
//不能通过编译,没有引入队列头文件 1 #include<stdlib.h> 2 #define MAX_VERTEX_NUM; 3 typedef int infoType; 4 ty ...
- 数据结构(12)----图(遍历、最小生成树、easyX可视化)
从图的某一顶点出发访问遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph). 深度优先遍历(Depth_Frist_Search),也有称为深度优先搜 ...
- 数据结构(廿五) -- C语言版 -- 图 - 图的遍历 -- 邻接矩阵 - 深度/广度优先遍历/搜索(DFS、BFS)
内容预览 零.读前说明 一.概 述 二.深度优先遍历(DFS) 2.1.无向图的遍历过程 2.2.有向图的遍历过程 2.3.总结说明 2.4.实现源代码 三.广度优先遍历(BFS) 3.1.广度优先的 ...
- 图的遍历c语言数据结构实验报告,数据结构实验报告--图的遍历
江 西 理 工 大 学 数据结构 实验报告 实验名称 图的遍历 日期 2014-12-01 专业班级 计算机(中加)131班 地点 信息学院621 实验人 王鹏伟 学号 同组人 单独完成 152013 ...
最新文章
- winform 安装部署
- vs2019中如何创建qt项目_VS2019创建新项目居然没有.NET Core3.0的模板?
- MFC的GDI绘制坐标问题
- Maven技巧和窍门:高级Reactor选项
- ubuntu创建wifi热点(android可识别)亲测可用
- (三)pscc学习笔记
- git pull VS git fetchmerge(good)
- Kaggle实战之一回归问题
- 机器学习(3)——有监督学习
- 语义分割标注工具Semantic Segmentation Editor 快速安装指南
- 三自由度机器人动力学(三个转动自由度+word报告+matlab代码)
- 戴尔台式机装linux系统,在戴尔(Dell)台式机上安装深度Deepin系统的BIOS设置方法...
- mobi格式文件解压实践
- python数据分析之pandas数据合并
- 杭电ACM-LCY算法进阶培训班-专题训练(计算几何入门)
- 联想台式计算机设置u盘启动不了,联想台式电脑设置bios时U盘、光盘都启动不了是怎么回事?...
- 亿美软通 短信接口整合(JAVA)
- dxc 3.0 线程的生命周期
- 《海底捞你学不会》探索管理的本质
- iOS小知识:开发者后台添加新的UDID之后,如何更新自动管理签名证书的设备描述文件(Provisioning Profiles)?
热门文章
- Android M(6.0) 权限相关
- Windows Server 2008 R2托管服务账户(MSA)的功能
- 计算机程序的构造和解释1构造过程抽象1.2过程与它们所产生的计算
- SVM支持向量机习题解答
- axios post object object_Vue前端开发——数据交互axios
- css编写加载页面动画效果
- 翁恺老师C语言学习笔记(七)函数
- 萌新的Python练习实例100例(二)根据企业的利润,计算企业的方法奖金
- intellij IDEA:Error : java 不支持发行版本xxx 的问题
- DeFi智能投顾Rari Capital协议已产生超165000美元费用