Graph——bfs,dfs
来源:互联网 发布:vb基础代码 编辑:程序博客网 时间:2024/06/03 16:59
做个记录:
BFS——queue实现
#include<iostream>#include<cstring>#include<queue>using namespace std;#define N 100struct Graph{ int vexnum; int arcnum; char vexs[N]; int arcs[N][N]; };int Loc_vexs(Graph G, char a){ for(int i=1;i<=G.vexnum;i++) { if(G.vexs[i] == a) { return i; } } }void Input(Graph &G){ cin>>G.vexnum; cin>>G.arcnum; for(int i=1;i<=G.vexnum;i++) { cin>>G.vexs[i]; } for(int i=1;i<=G.vexnum;i++) { for(int j=1;j<=G.vexnum;j++) { G.arcs[i][j] = 0; } } for(int i=1;i<=G.arcnum;i++) { char a,b; cin>>a>>b; int x = Loc_vexs(G,a); int y = Loc_vexs(G,b); G.arcs[x][y] = 1; }}void Bfs(Graph G){ int v[N]; memset(v,0,sizeof(v)); queue<int> q; q.push(1); v[1] = 1; cout<<G.vexs[1]<<" "; while(!q.empty()) { int u = q.front(); for(int i=1;i<=G.vexnum;i++) { if(!v[i] && G.arcs[u][i]==1) { cout<<G.vexs[i]<<" "; v[i] = 1; q.push(i); } } q.pop(); } cout<<endl;}int main(){ Graph G; Input(G); Bfs(G); return 0;}
bfs递归还未实现
DFS——stack实现
#include<iostream>#include<cstring>#include<stack>using namespace std;#define N 100struct Graph{ int vexnum; int arcnum; char vexs[N]; int arcs[N][N]; };int Loc_vexs(Graph G, char a){ for(int i=1;i<=G.vexnum;i++) { if(G.vexs[i] == a) { return i; } } }void Input(Graph &G){ cin>>G.vexnum; cin>>G.arcnum; for(int i=1;i<=G.vexnum;i++) { cin>>G.vexs[i]; } for(int i=1;i<=G.vexnum;i++) { for(int j=1;j<=G.vexnum;j++) { G.arcs[i][j] = 0; } } for(int i=1;i<=G.arcnum;i++) { char a,b; cin>>a>>b; int x = Loc_vexs(G,a); int y = Loc_vexs(G,b); G.arcs[x][y] = 1; }}void Dfs(Graph G){ int v[N]; memset(v,0,sizeof(v)); stack<int> s; s.push(1); v[1] = 1; cout<<G.vexs[1]<<" "; while(!s.empty()) { int u = s.top(); int flag = 0; for(int i=1;i<=G.vexnum;i++) { if(!v[i] && G.arcs[u][i]==1) { s.push(i); cout<<G.vexs[i]<<" "; v[i] = 1; flag = 1; break; // 仅此于bfs不同 } } if(flag==0) // 标记 u 此时为最深处 ,开始回溯 { s.pop(); } }}int main(){ Graph G; Input(G); Dfs(G); return 0;}
DFS——递归实现
#include<iostream>#include<cstring>using namespace std;#define N 100struct Graph{ int vexnum; int arcnum; char vexs[N]; int arcs[N][N]; };int Loc_vexs(Graph G, char a){ for(int i=1;i<=G.vexnum;i++) { if(G.vexs[i] == a) { return i; } } }void Input(Graph &G){ cin>>G.vexnum; cin>>G.arcnum; for(int i=1;i<=G.vexnum;i++) { cin>>G.vexs[i]; } for(int i=1;i<=G.vexnum;i++) { for(int j=1;j<=G.vexnum;j++) { G.arcs[i][j] = 0; } } for(int i=1;i<=G.arcnum;i++) { char a,b; cin>>a>>b; int x = Loc_vexs(G,a); int y = Loc_vexs(G,b); G.arcs[x][y] = 1; }}int v[N];void Dfs(Graph G,int x){ cout<<G.vexs[x]<<" "; v[x] =1; for(int i=1;i<=G.vexnum;i++) { if(!v[i] && G.arcs[x][i]==1) { Dfs(G,i); } }} int main(){ Graph G; Input(G); memset(v,0,sizeof(v)); Dfs(G,1); // 假设从vexs[1] 开始 return 0;}
0 0
- Graph——bfs,dfs
- DFS&&BFS Search Graph
- Clone Graph BFS & DFS
- Undirected Graph BFS/DFS
- [LeetCode] Clone Graph(!!!!graph&dfs&bfs)
- Graph Traversal (BFS vs DFS vs Stack)
- Clone Graph [leetcode] dfs和bfs
- Clone Graph DFS&BFS 图的复制
- LeetCode 133 Clone Graph (BFS || DFS)
- BFS和DFS解决LeetCode133. Clone Graph
- poj1419——Graph Coloring(dfs)
- Graph Algorithms: Implementation& DFS& Strong Component& BFS & Dijkstra & Bellman Ford
- Stanford 算法入门 Week 4 Graph,BFS,DFS, partial_sort
- leetcode -- Clone Graph -- deep copy问题,dfs,bfs
- [数据结构]Graph之拓扑排序BFS&DFS实现
- Leetcode 133. Clone Graph用BFS、DFS两种解法
- 模板——之DFS & BFS
- 【hdu1241】Oil Deposits——dfs/bfs
- 常见浏览器兼容性问题与解决方案
- 主成分分析降维(MNIST数据集)
- 文件存储读写与动态添加控件结合
- 使用继承时,对象的初始化过程
- 使用 C# 编写简易 ASP.NET Web 服务器
- Graph——bfs,dfs
- 【解决方案】去掉谷歌浏览器获取焦点时默认的input、textarea的边框和背景
- 关于Qwt图像处理的方法心得
- Swift 常用第三方库持续整理
- Android中CS域和PS域以及手机中常用术语简介
- Jmeter对于请求参数封装及使用
- [HDU] I Hate It [线段树]
- Mysql完全卸载
- java-读取zip文件内容