标签:
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6251 Accepted Submission(s): 2081
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<stack> #include<queue> #include<stdlib.h> #include<algorithm> #define LL __int64 using namespace std; const int MAXN=200+5; const int INF=0x3f3f3f3f; int n,m,sx,sy,ex,ey,ans; int vis[MAXN][MAXN][2]; int dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; char mat[MAXN][MAXN]; struct node { int x,y; }s; bool ok(int x,int y) { if(0<=x && x<n && 0<=y && y<m) return true; else return false; } void BFS(int x,int y,int opt) { s.x=x; s.y=y; vis[x][y][opt]=1; queue<node> Q; Q.push(s); while(!Q.empty()) { node now,next; now=Q.front();Q.pop(); for(int i=0;i<4;i++) { next.x=now.x+dir[i][0]; next.y=now.y+dir[i][1]; if(ok(next.x,next.y) && !vis[next.x][next.y][opt] && mat[next.x][next.y]!=‘#‘ && mat[next.x][next.y]!=‘Y‘ && mat[next.x][next.y]!=‘M‘) { vis[next.x][next.y][opt]=vis[now.x][now.y][opt]+1; Q.push(next); } } } return ; } int main() { while(scanf("%d %d",&n,&m)!=EOF) { memset(mat,0,sizeof(mat)); for(int i=0;i<n;i++) { scanf("%s",mat[i]); for(int j=0;j<m;j++) { if(mat[i][j]==‘Y‘) sx=i,sy=j; if(mat[i][j]==‘M‘) ex=i,ey=j; } } memset(vis,0,sizeof(vis)); BFS(sx,sy,0); BFS(ex,ey,1); ans=INF; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(vis[i][j][0] && vis[i][j][1] && mat[i][j]==‘@‘) { int tmp=(vis[i][j][0]-1)+(vis[i][j][1]-1); if(tmp<ans) ans=tmp; } } } printf("%d\n",ans*11); } return 0; }
标签:
原文地址:http://www.cnblogs.com/clliff/p/4676858.html