图的深搜与广搜
来源:互联网 发布:java如何解决并发问题 编辑:程序博客网 时间:2024/04/29 16:34
#include<iostream>#include<queue>#define MAXNUM 20using namespace std;struct Graph{ int Vertex[MAXNUM]; int Arc[MAXNUM][MAXNUM]; int VertexNum,ArcNum;};int n,m;int vis[MAXNUM];Graph G;queue<int> q;void dfs(int index){ int i; cout<<index<<" "; vis[index]=1; for(i=0; i<G.VertexNum; i++) if(vis[i]==0&&G.Arc[index][i]!=0) dfs(i);}void dfsG(){ int i; for(i=0; i<G.VertexNum; i++) vis[i]=0; for(i=0; i<G.VertexNum; i++) if(vis[i]==0) dfs(i);}void bfs(int index){ int i,num; cout<<index<<" "; vis[index]=1; q.push(index); while(!q.empty()) { num=q.front(); q.pop(); for(i=0; i<G.VertexNum; i++) { if(G.Arc[num][i]!=0&&vis[i]==0){ cout<<i<<" "; vis[i]=1; q.push(i); } } }}void bfsG(){ int i; for(i=0; i<G.VertexNum; i++) vis[i]=0; for(i=0; i<G.VertexNum; i++) { if(vis[i]==0) { bfs(i); } }}int main(){ cout<<"Put in Points and Arc?"<<endl; cin>>G.VertexNum>>G.ArcNum; cout<<"Put some information about arcs:For Example(0 1 power)"<<endl; for(int i=0; i<G.ArcNum; i++) { cin>>n>>m; cin>>G.Arc[n][m];//边权重 //G.Arc[m][n]=G.Arc[n][m];//有向无向就差这一句话 } cout<<"DFS:"; dfsG(); cout<<endl<<"---------"<<endl; cout<<"BFS:"; bfsG(); return 0;}
首先图在计算机中的存储方式有两种。邻接矩阵和邻接表两种方式。但是就单纯的做题来说,邻接表方法太复杂。邻接矩阵相对简单。以下便是通过邻接矩阵来表示图,对图的dfs与bfs。由于自身学习时是需要带权重的。因此在后边增加了权重输入,根据要求可以更改。
0 0
- 图的深搜与广搜
- 图的深搜与广搜
- 广搜与深搜的区别
- 深搜与广搜的特点
- 深搜与广搜的区别
- 广搜与深搜
- 深搜与广搜
- 深搜与广搜
- 广搜与深搜
- 深搜与广搜
- 广搜与深搜的小区别
- 邻接表的深搜与广搜遍历
- 二叉树的深搜与广搜
- 对与深搜和广搜的看法
- 图的遍历 (深搜DFS与广搜BFS)
- 深搜与广搜以及例题
- 广搜与深搜实现
- Java实现图的遍历(深搜与广搜)
- 程序员的书写格式要求t
- AndroidStudio插件GsonFormat快速实现Java实体对象
- Machine Learning into Action NOTE 00
- 问题跟踪管理软件工具(JIRI)
- ubuntu 14.04 使用 p4merge
- 图的深搜与广搜
- MFC 之双缓冲
- 用GO帮朋友写了一个批量群发的软件,其中一个需求是使用rsa登录ssh,代码片段分享.
- 通信领域当前主流技术极其社会需求调查报告
- Android创建菜单栏(android布局实现)
- 在XCode中设置组件的圆角属性方法
- App应用测试平台
- 常用的JavaScript验证正则表达式
- 正则表达式30分钟入门教程