图的dfs、bfs
来源:互联网 发布:养匪自重知乎 编辑:程序博客网 时间:2024/05/17 22:53
题目:http://www.gdfzoj.com/oj/contest/150/problems/7
这种搜环类型的题就是dfs。不多说,上代码
#include <cstdio>#include <vector>#include <cstring>using namespace std;const int maxSize=2000;int n,m,num=1,t;int a[maxSize+5][maxSize+5];bool ans;int vis[maxSize+5];vector <int> M[maxSize+5];void dfs(int x){int i,y,j,t1;if (x==t)//搜回去{ans=true;return ;}vis[x]=true;for (i=0;i<M[x].size();i++)if (!vis[M[x][i]])dfs(M[x][i]);}int main(){int i,x,y,j;freopen("a.txt","r",stdin);scanf("%d%d",&n,&m);for (i=0;i<m;i++){scanf("%d%d",&x,&y);a[x][y]=1;}for (i=1;i<=n;i++)//从邻接矩阵转向量可以防止重复for (j=1;j<=n;j++)if (a[i][j]==1)M[i].push_back(j);for (t=1;t<=n;t++)//dfs每个点{ans=false;memset(vis,false,sizeof(vis));for (i=0;i<M[t].size();i++)//把下一个dfs,可以防止一dfs就返回 {dfs(M[t][i]);if (ans==true)//一搜到环就结束{printf("T\n");break;}}if (ans==false)//找不到环printf("F\n");}return 0;}
bfs:一般应用于求最短路。搜到终点即可结束
题目:http://www.gdfzoj.com/oj/contest/150/problems/10
一句话:用队列实现
PS:一般不会多次bfs(每个点都bfs)
#include <cstdio>#include <algorithm>#include <queue>#include <cstring>using namespace std;struct node{int x,y,t;};const int maxSize=1000;char c[maxSize+5][maxSize+5];node p1;int n,m;queue <node> q;int vis[maxSize+5][maxSize+5],f[maxSize+5][maxSize+5];int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};void bfs(){int i,t;node p,q1;while (!q.empty()){q1=q.front();q.pop();for (i=0;i<4;i++){p.x=q1.x+fx[i][0];p.y=q1.y+fx[i][1];if (p.x<0 || p.x==m || p.y<0 || p.y==n)continue;if (vis[p.x][p.y]==0 && c[p.x][p.y]!='X'){vis[p.x][p.y]=1;f[p.x][p.y]=f[q1.x][q1.y]+1;q.push(p);}}}memset(vis,0,sizeof(vis));q.push(p1);t=0;while (!q.empty()){q1=q.front();q.pop();p.t=q1.t+1;for (i=0;i<4;i++){p.x=q1.x+fx[i][0];p.y=q1.y+fx[i][1];if (p.x<0 || p.x==m || p.y<0 || p.y==n)continue;if (c[p.x][p.y]=='E'){printf("%d\n",p.t); t=1;while (!q.empty())q.pop();break;}if (vis[p.x][p.y]==0 && c[p.x][p.y]!='X' && f[p.x][p.y]>p.t){vis[p.x][p.y]=1;q.push(p);}}}if (t==0)printf("YYR is extremely dangerous!\n");}int main(){int i,j;node n1;freopen("a.txt","r",stdin);while (scanf("%d%d",&m,&n)){if (m==0)break;memset(c,0,sizeof(c));memset(vis,0,sizeof(vis));memset(f,0,sizeof(f));for (i=0;i<m;i++){scanf("%s",&c[i]);for (j=0;j<n;j++){if (c[i][j]=='P'){p1.x=i;p1.y=j;p1.t=0;}else if (c[i][j]=='D'){n1.x=i;n1.y=j;vis[i][j]=1;q.push(n1);}}}bfs();}return 0;}
阅读全文
0 0
- 图的dfs、bfs
- 图的遍历:DFS BFS
- 图的BFS与DFS
- 图的创建BFS DFS
- 图的dfs和bfs
- 图的遍历(DFS&BFS)
- 图的遍历[DFS][BFS]
- 图的建立 BFS DFS
- 图的BFS,DFS算法
- 图的建立-深度DFS-广度BFS
- 图的建立 与 DFS、BFS
- 图的建立及BFS,DFS遍历
- 图的算法DFS、BFS、Prim、Kruskal
- 图的遍历(BFS, DFS)源代码
- 图的BFS、DFS算法实现
- 图的邻接矩阵表示(DFS,BFS)
- 图的BFS和DFS学习笔记
- 《大话数据结构》图的BFS和DFS
- 转义字符
- 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefor
- 10个完整的Android开源项目,值得大家学习借鉴
- Jzoj5414 幸运值
- Maven之(一)Maven是什么
- 图的dfs、bfs
- POJ 3728 The merchant
- 洛谷 1080 [NOIP2012] 国王游戏 贪心+高精
- Xcode9学习笔记38
- Maven之(二)Maven生命周期
- 货车运输
- Maven之(三)Maven插件
- 014 方程组的通解 方法一:通解方程组 方法二:基础解析解
- luogu 选课