HDU-2612-Find a way
2013-06-25 23:00
399 查看
这个题仍然属于BFS题,要求是求出2个人能够在KFC相遇最小总时间,思路是2次进行BFS搜索,记录2个人到所有KFC的距离,然后枚举取最小值即可
需要注意的是,其中可能某些KFC需要穿过某些KFC~WA了很久
代码:
需要注意的是,其中可能某些KFC需要穿过某些KFC~WA了很久
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<queue> using namespace std; const int maxn=211; struct node { int x; int y; int ans; }; int n,m,sx[3],sy[3],cur,movex[4]={1,-1,0,0},movey[4]={0,0,1,-1}; int ansa[maxn][maxn],ansb[maxn][maxn]; char map[maxn][maxn]; bool vis[maxn][maxn]; queue<node> q; void BFS(int x,int y,int index) { memset(vis,0,sizeof(vis)); //q.push((node){x,y,0}); node ita; ita.x=x; ita.y=y; ita.ans=0; q.push(ita); vis[x][y]=1; while(!q.empty()) { node v=q.front(); q.pop(); for(int i=0;i<4;i++) { int itx=v.x+movex[i]; int ity=v.y+movey[i]; if(map[itx][ity]=='#'||vis[itx][ity]) continue; if(map[itx][ity]=='@') { vis[itx][ity]=1; if(index==0) ansa[itx][ity]=min(ansa[itx][ity],v.ans+1); else ansb[itx][ity]=min(ansb[itx][ity],v.ans+1); } vis[itx][ity]=1; // q.push((node){itx,ity,v.ans+1}); node ita; ita.x=itx; ita.y=ity; ita.ans=v.ans+1; q.push(ita); } } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { cur=0; memset(ansa,0,sizeof(ansa)); memset(ansb,0,sizeof(ansb)); for(int i=1;i<=n;i++) scanf("%s",map[i]+1); for(int i=0;i<=n+1;i++) map[i][0]=map[i][m+1]='#'; for(int i=0;i<=m+1;i++) map[0][i]=map[n+1][i]='#'; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(map[i][j]>='Y'||map[i][j]=='M') { sx[cur]=i; sy[cur++]=j; if(cur==2) break; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ansa[i][j]=ansb[i][j]=1<<28; BFS(sx[0],sy[0],0); BFS(sx[1],sy[1],1); int ans=1<<30; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(map[i][j]=='@'&&ansa[i][j]&&ansb[i][j]) ans=min(ans,ansa[i][j]+ansb[i][j]); printf("%d\n",ans*11); } return 0; }
相关文章推荐
- H - Find a way HDU - 2612 ——2次BFS
- HDU 2612 Find a way(BFS)
- hdu 2612 Find a way(BFS)
- HDU-2612-Find a way(BFS)
- hdu 2612 Find a way【BFS】
- HDU-2612 Find a way
- hdu 2612 Find a way(双向bfs)
- hdu 2612 Find a way
- HDU 2612 Find a way (BFS)
- Find a way HDU - 2612 两点BFS
- HDU 2612 Find a way
- HDU 2612 Find a way (BFS)
- Find a way(bfs)HDU - 2612
- HDU-2612--Find a way---BFS广搜
- -----hdu 2612 Find a way
- Find a way HDU - 2612 双向BFS
- 【BFS】HDU 2612 Find a way
- Hdu 2612 Find a Way(双点bfs)
- hdu 2612 Find a way (广搜)
- HDU - 2612 Find a way(15.10.10 搜索专题)bfs