总感觉在“X”地方不对,应该用张地图mark来标记"x"点是否走过。。#include<iostream>//1242WA using namespace std; #include<queue> int map[205][205]; int n,m,si,sj,ei,ej,mint; int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}}; struct point { int x,y; int t; }; int check(int i,int j) { if(i>=0&&i<n&&j>=0&&j<m&&map[i][j]!=0) return 1; return 0; } int bfs() { queue<point> Q; point p0,p1; int i; p0.x=si,p0.y=sj,p0.t=0; map[si][sj]=0; Q.push(p0); while(!Q.empty()) { p0=Q.front(); Q.pop(); for(i=0;i<4;i++) { p1.x=p0.x+dir[i][0]; p1.y=p0.y+dir[i][1]; p1.t=p0.t+1; if(p1.x==ei&&p1.y==ej&&p1.t<mint) { mint=p1.t; } if(check(p1.x,p1.y)) { if(map[p1.x][p1.y]==1) { map[p1.x][p1.y]=0; Q.push(p1); } else if(map[p1.x][p1.y]==2) { p1.t+=1; map[p1.x][p1.y]=0; Q.push(p1); } } } } return mint; } int main() { int i,j; char ch; while(cin>>n>>m) { mint=999999999; for(i=0;i<n;i++) { for(j=0;j<m;j++) { cin>>ch; //scanf("%c",&ch); if(ch=='#') map[i][j]=0; else if(ch=='.') map[i][j]=1; else if(ch=='x') map[i][j]=2; else if(ch=='r') si=i,sj=j; else if(ch=='a') ei=i,ej=j; } getchar();//!!! } if(bfs()!=999999999) cout<<mint<<endl; else cout<<"Poor ANGEL has to stay in the prison all his life."<<endl; } return 0; }