深度优先搜索和广度优先搜索
2016-11-29 15:54
260 查看
//DFS #include <iostream> #include <vector> #include <algorithm> using namespace std; vector< vector<int> > V; //邻接表 vector<int> visit; int n;//点数 int m;//边数 vector<int> ans; void dfs(int n){ ans.push_back(n); visit = 1; for(int j=0;j<V .size();j++){ if(!visit[V [j]]) //如果邻接的点未被访问过则访问邻接点 dfs(V [j]); } } bool cmp(int a,int b){ return a>b;} int main(){ V.clear(); visit.clear();//先初始化两个都为空 cin>>n;cin>>m; visit.resize(n+1); V.resize(n+1);//假设角标从1开始到n for(int i=0;i<visit.size();i++)//初始化为未访问 等下回来在优化 visit[i] = 0; for(int i=0;i<m;i++){//建立V int st,ed; cin>>st>>ed; V[st].push_back(ed); V[ed].push_back(st); } for(int i=1;i<=n;i++) { int sz = V[i].size(); sort(V[i].begin(),V[i].end(),cmp); } for(int i=1;i<=n;i++){ if(!visit[i]) dfs(i); } int first = 1; for(int i=0 ;i<n;i++){ if(first) first = 0; else cout<<"-->"; cout<<ans[i]; } return 0; } /* input: 6 10 1 2 1 3 1 5 5 2 5 3 5 6 4 2 4 3 4 5 4 6 output: 1-->5-->6-->4-->3-->2 */ //BFS #include"iostream" #include"algorithm" #include"queue" using namespace std; int n; int m; queue<int> Q; vector< vector<int> > G;//邻接表 vector<int> visit; //标志数组 vector<int> ans; //访问路径 void bfs(){ for(int i=1;i<=n;i++){ if(!visit[i]) { Q.push(i); visit[i] = 1; while(!Q.empty()){ int now = Q.front(); Q.pop(); ans.push_back(now); for(int j = 0;j < G[now].size();j++){ if(!visit[G[now][j]]) { Q.push(G[now][j]); visit[G[now][j]]=1; } } } } } } bool cmp(int a,int b){ return a>b;} int main(){ cin>>n>>m; G.resize(n+1); visit.resize(n+1); for(int i=0;i<=n;i++) visit[i] = 0; for(int i = 0;i< m;i++){ int st,ed; cin>>st>>ed; G[st].push_back(ed); G[ed].push_back(st); } for(int i=1;i<=n;i++) { sort(G[i].begin(),G[i].end(),cmp); } bfs(); int first = 1; for(int i=0;i<ans.size();i++) { if(first) first = 0; else cout<<"-->"; cout<<ans[i]; } return 0; } /* input: 6 10 1 2 1 3 1 5 5 2 5 3 5 6 4 2 4 3 4 5 4 6 output 1-->5-->3-->2-->6-->4 */
相关文章推荐
- 图的邻接表表示、广度优先、深度优先搜索
- 图的遍历之 深度优先搜索和广度优先搜索
- 深度优先搜索与广度优先搜索异同
- 树的存储结构和图的存储结构以及图的深度优先DFS搜索和BFS广度优先搜索
- 迷宫问题的求解方式:应用深度优先和广度优先的搜索
- 深度优先搜索和广度优先搜索的比较与分析
- 图搜索——深度优先与广度优先
- 深度优先搜索遍历与广度优先搜索遍历
- File&&文件搜索深度优先和广度优先
- C语言搜索算法之深度优先搜索和广度优先搜索
- 广度优先搜索求树的深度
- 深度优先搜索遍历与广度优先搜索遍历
- 广度优先搜索和深度优先搜索
- 广度优先搜索与深度优先搜索的 java 实现
- 深度优先和广度优先搜索文件
- 图基本算法 图搜索(广度优先、深度优先)
- 数据结构和算法总结(一):广度优先搜索BFS和深度优先搜索DFS
- 深度优先搜索遍历与广度优先搜索遍历
- 数据结构--图--图的数组存储表示,深度优先搜索遍历和广度优先搜索遍历
- 深度优先搜索DFS/广度优先搜索BFS的一个应用实例(华为编程大赛赛题)