图的基本操作:建立图,DFS,BFS-06-图1 列出连通集
来源:互联网 发布:java 签名是什么 编辑:程序博客网 时间:2024/06/03 01:41
图的遍历方式一般有两种:DFS,BFS
- 题目
06-图1 列出连通集 (25分) - 分析
这里考察的是图的基本操作:建立一个图,深度优先遍历(DFS)和广度优先遍历(BFS)。
由于这儿N很小,我就直接用邻接矩阵(二维数组)来存储图。
DFS利用递归,BFS利用队列。 - 我的代码
#include<iostream>#include<cstring>#include<queue>using namespace std;const int MAXN = 10;int graph[MAXN][MAXN];int visited[MAXN];queue<int> Q;void DFS(int begin,int N){ cout<<begin<<" "; visited[begin] = 1; for(int j=0; j<N; j++) { if(graph[begin][j]==1 && visited[j]==0) DFS(j,N); }}void BFS(int begin, int N){ cout<<begin<<" "; visited[begin] = 1; Q.push(begin); while(!Q.empty()) { int next = Q.front(); Q.pop(); for(int i=0; i<N; i++) { if(graph[next][i]==1 && visited[i]==0) { cout<<i<<" "; visited[i] = 1; Q.push(i); } } }}int main(){ #ifndef ONLINE_JUDGE freopen("g1.txt","r",stdin); #endif int N,E; cin>>N>>E; memset(graph[0],-1,sizeof(graph)); int x,y; for(int i=0; i<E; i++) { cin>>x>>y; graph[x][y] = 1; graph[y][x] = 1; } memset(visited,0,sizeof(visited)); for(int i=0; i<N; i++) { if(!visited[i]) { cout<<"{ "; DFS(i,N); cout<<"}"<<endl; } } memset(visited,0,sizeof(visited)); for(int i=0; i<N; i++) { if(!visited[i]) { cout<<"{ "; BFS(i,N); cout<<"}"<<endl; } } return 0;}
- 注意点
- 其实memset函数一般用于字符数组赋值,最好不要用它给整数数组赋值,用的话只能赋值为-1或0。
- DFS与BFS两者的时间复杂度是相同的,没有优劣之分,只是视不同情况选择不同算法。
深度优先算法适合目标比较明确,以找到目标为主要目的的情况;
广度优先算法适合在不断扩大遍历范围时找到相对最优解的情况。
阅读全文
0 0
- 图的基本操作:建立图,DFS,BFS-06-图1 列出连通集
- PTA 2-1 列出连通集【DFS+BFS基础】
- PAT--列出连通集--dfs&bfs
- 列出连通集-----简单dfs+bfs
- 列出连通集——DFS+BFS
- 图论BFS DFS 列出连通集
- PTA-列出连通集(DFS+BFS)
- 图的建立 BFS DFS
- 06-图1 列出连通集
- 06-图1 列出连通集
- 06-图1-列出连通集
- 06-图1 列出连通集
- PTA 06-图1 列出连通集
- 06-图1 列出连通集
- 06-图1 列出连通集
- 06-图1 列出连通集
- 06-图1 列出连通集
- 06-图1 列出连通集
- c++移位运算
- tomcat环境变量配置和把tomcat集成到eclipse不是一回事
- fastdfs支持断点上传
- spark 2.1 RDDCheckpointData and ReliableRDDCheckpointData
- Eclipse neon(4.6)安装tomcat plugin
- 图的基本操作:建立图,DFS,BFS-06-图1 列出连通集
- java中判断字符串是否为数字的方法的几种方法
- jquery文件上传控件 WebUploader
- (三) Spring Cloud
- jsp过大时编译失败的解决方法
- php 字符串转日期格式
- 全面理解Java内存模型
- 通过反射调用的类中使用Spring@Autowired自动装配的成员为空的解决办法
- UNIX命令行快速入门5