标签:des blog io ar os sp for strong on
Description
Input
Output
Sample Input
Sample Output
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> #include<algorithm> #include<cmath> #include<set> #include<queue> #include<vector> using namespace std; queue<int> q; #define INF 1<<30 int n,m,sx,sy,ans,dp[205][205]; char a[205][205]; int dic[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; bool vis[205][205]; bool check(int x,int y) { if(x<0||x>=n||y<0||y>=m||vis[x][y]||a[x][y]==‘#‘) return false; return true; } void bfs() { int x,y,step; q.push(sx),q.push(sy),q.push(0); while(!q.empty()) { x=q.front(),q.pop(); y=q.front(),q.pop(); step=q.front(),q.pop(); if(a[x][y]==‘r‘) { if(ans>step) ans=step; } for(int i=0;i<4;i++) { int xx,yy; xx=x+dic[i][0],yy=y+dic[i][1]; if(check(xx,yy)) { if((a[xx][yy]==‘.‘||a[xx][yy]==‘r‘)&&dp[xx][yy]>step+1) { q.push(xx),q.push(yy),q.push(step+1); dp[xx][yy]=step+1; } if(a[xx][yy]==‘x‘&&dp[xx][yy]>step+2) { q.push(xx),q.push(yy),q.push(step+2); dp[xx][yy]=step+2; } } } } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { ans=INF; memset(vis,0,sizeof(vis)); for(int i=0;i<n;i++) for(int j=0;j<m;j++) dp[i][j]=INF; for(int i=0;i<n;i++) scanf("%s",a[i]); for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(a[i][j]==‘a‘) sx=i,sy=j; } vis[sx][sy]=1; bfs(); if(ans!=INF) printf("%d\n",ans); else printf("Poor ANGEL has to stay in the prison all his life.\n"); } return 0; }
标签:des blog io ar os sp for strong on
原文地址:http://www.cnblogs.com/a972290869/p/4166201.html