2018寒假训练-紫皮书-dfs与bfs
2018-01-18 11:03
330 查看
图的搜索包含dfs与bfs,两者使用的场合不同,dfs通常用于解决图的可行解问题,bfs通常用于解决最优解问题,下面是两个典型的问题来体会bfs与dfs。
<dfs>油田问题,见HDU 1241
<dfs>油田问题,见HDU 1241
#include<iostream> using namespace std; int m,n,sum,cnt; char g[101][101]; void dfs(int x,int y){ if(x<0||x>=m||y<0||y>=n)return ; if(g[x][y]=='*')return ; sum++; g[x][y]='*'; for(int i=-1;i<=1;i++) for(int j=-1;j<=1;j++) dfs(x+i,y+j); } int main(){ while(cin>>m>>n&&m&&n){ cnt=0; for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>g[i][j]; for(int i=0;i<m;i++) for(int j=0;j<n;j++){ sum=0; dfs(i,j); if(sum>0)cnt++; } cout<<cnt<<endl; } return 0; }<bfs>走迷宫,见POJ 3984
#include<iostream> #include<cstdio> using namespace std; typedef struct { int x; int y; int pre; }node; const int maxn=1005; node n[maxn]; int m[6][6]; int a[]={1,-1,0,0}; int b[]={0,0,1,-1}; void print(int k){ int c=n[k].pre; if(c==-1){ printf("(0, 0)\n"); return ; } print(c); printf("(%d, %d)\n",n[k].x,n[k].y); } void bfs(int x,int y){ int head=0,tail=0; n[tail].x=x; n[tail].y=y; n[tail].pre=-1; m[x][y]=1; tail++; while(tail>head){ int xx=n[head].x; int yy=n[head].y; if(xx==4&&yy==4){ print(head); return ; } for(int i=0;i<4;i++){ int mm=xx+a[i]; int nn=yy+b[i]; if(mm<0||mm>=5||nn<0||nn>=5||m[mm][nn]==1)continue; n[tail].x=mm; n[tail].y=nn; n[tail].pre=head; tail++; m[mm][nn]=1; } head++; } } int main(){ for(int i=0;i<5;i++) for(int j=0;j<5;j++) cin>>m[i][j]; bfs(0,0); return 0; }
相关文章推荐
- 2018寒假训练-紫皮书-dfs与bfs
- 2018寒假训练-紫皮书-dfs与bfs
- 2018寒假训练-紫皮书-dfs与bfs
- 寒假训练--图的基本知识--图结构练习——BFSDFS——判断可达性
- 寒假训练--dfs+bfs--救基友记3
- 寒假训练—— HDU - 2094 产生冠军 DFS or BFS
- 寒假训练--dfs+bfs--找朋友
- 2018年全国多校算法寒假训练营练习比赛第四场 F Call to your teacher 【DFS+BFS】
- SDAU训练日志第22篇----------DFS和BFS(4)(2018年3月6日)
- 蓝桥杯寒假训练一1021算术题(DFS剪枝)
- HLJU15级寒假培训dfs&bfs题解
- 2018寒假训练总结
- CQUPT 2018 寒假训练 DIV2 (1)STL基础题解
- CQUPT 2018 寒假训练 DIV2 (2)数学基础题解
- 2018_bzu_寒假训练计划
- 寒假训练--图的基本知识--图结构练习——BFS——从起始点到目标点的最短步数
- 2017-2018学年寒假大一新生训练
- SDUT_2015寒假集训_BFS&DFS_D-找朋友
- DFS-BFS搜索专题【经典训练题】【有时间一个个做下来】
- 信息新生训练 BFS,DFS 小朋友的专题作业