SDUTOJ 2779 找朋友(BFS&&DFS)
来源:互联网 发布:htpp js.shxedc.com 编辑:程序博客网 时间:2024/05/19 13:25
BFS--广度优先搜索 先把同层的找完,再往下一层去找。用队列实现。
#include<stdio.h>#include<string.h>using namespace std;struct node{ int x,y; int t;}que[200];char mp[20][20];bool vis[20][20];int chx[]={0,0,1,-1}; //四个方向int chy[]={1,-1,0,0};int bfs(int x,int y,int n,int m){ int i,j; int s=0,e=0; struct node now,tmp; now.x=x; //初始化 now.y=y; now.t=0; que[s++]=now; //第一个点进队列 vis[x][y]=1; while(s>e) { now=que[e++]; //出队列 if(mp[now.x][now.y]=='Y') return now.t; for(i=0;i<4;i++) { tmp.x=now.x+chx[i]; tmp.y=now.y+chy[i]; tmp.t=now.t+1; if(tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<m&&!vis[tmp.x][tmp.y]&&mp[tmp.x][tmp.y]!='#') { que[s++]=tmp; //符合条件,进队列 vis[tmp.x][tmp.y]=1; //标记为1,不再经过此点 } } } return -1; //不能找到Y点,返回值为-1}int main(){ int n,m,i,j; while(~scanf("%d%d",&n,&m)) { memset(vis,0,sizeof(vis)); //标记数组初始化 for(i=0;i<n;i++) scanf("%*c%s",mp[i]); for(i=0;i<n;i++) //找到X的坐标 { for(j=0;j<m;j++) { if(mp[i][j]=='X') break; } if(j<m) break; } int ans = bfs(i,j,n,m); printf("%d\n",ans); } return 0;}
DFS--深度优先搜索 :对于最新发现的顶点,如果它还有以此为起点还未发现的边,就继续搜索下去。直到当前点的所有方向都已搜索完毕不符合条件了,就往前回溯。
#include<stdio.h>#include<string.h>using namespace std;const int inf = 1<<20;char mp[20][20];bool vis[20][20];int mini;int chx[]={0,0,1,-1};int chy[]={1,-1,0,0};struct node{ int x,y;};void dfs(int x,int y,int n,int m,int ans){ int i,j; struct node tmp; if(ans>=mini) return ; if(ans<mini&&mp[x][y]=='Y') { mini=ans; return ; } for(i=0;i<4;i++) { tmp.x=x+chx[i]; tmp.y=y+chy[i]; if(tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<m&&!vis[tmp.x][tmp.y]&&mp[tmp.x][tmp.y]!='#') { vis[tmp.x][tmp.y]=1; dfs(tmp.x,tmp.y,n,m,ans+1); vis[tmp.x][tmp.y]=0; } }}int main(){ int n,m,i,j; while(~scanf("%d%d",&n,&m)) { mini=inf; memset(vis,0,sizeof(vis)); for(i=0;i<n;i++) scanf("%*c%s",mp[i]); for(i=0;i<n;i++) { for(j=0;j<m;j++) { if(mp[i][j]=='X') break; } if(j<m) break; } int ans=0; vis[i][j]=1; dfs(i,j,n,m,ans); if(mini==inf) printf("-1\n"); else printf("%d\n",mini); } return 0;}
0 0
- SDUTOJ 2779 找朋友(BFS&&DFS)
- 【2779】找朋友 sdutoj
- 【BFS广度优先搜索】SDUTOJ 2779---找朋友
- SDUT:找朋友 BFS&&DFS
- 寒假训练--dfs+bfs--找朋友
- SDUT--找朋友(BFS&&DFS)
- OJ 2779找朋友 BFS
- SDUT 2779 找朋友 BFS
- sdut 2779 找朋友(dfs)
- SDUT-2779 找朋友(常规BFS)
- 找朋友 BFS
- 找朋友(bfs)
- 找朋友&& BFS
- 找朋友(bfs)
- 找朋友(bfs)
- DFS——找朋友
- SDUT2779_找朋友(BFS裸二维)
- SDUT 2779 找朋友
- 袄和艺刹秤伎那赝食旨厦再毕澳柑
- 渤赵卜再阎萄兜扑久簇痉酝掣职巢
- 肥瓶僖禄惹眉赵寐韧碌郊资邢阜研
- Mori Girl
- Segment Tree
- SDUTOJ 2779 找朋友(BFS&&DFS)
- openfire 问题集锦
- Binary Indexed Tree
- Segment Tree 扫描线
- JQuery插件的开发真的有那么难吗?
- POJ 2195 Going Home
- LeetCode—判断是否为二叉搜索树
- 软件开机自启动
- LeetCode: Anagrams