题目链接:fzu1684 代码: #include <iostream> #include <cmath> #include <queue> using namespace std; struct node { int x,y,step; }tmp,head; queue <node> q; char map[25][25]; int e[25][25]; int dir[4][2]={-1,0,0,-1,1,0,0,1}; int r,w; int energy,fx,fy; int ex,ey; void bfs() { bool flag=true; while(!q.empty()) { head=q.front(); q.pop(); if(head.x==ex&&head.y==ey) { cout<<head.step<<endl; flag=false; break; } for(int u=0;u<4;u++) { tmp.x=head.x+dir[u][0]; tmp.y=head.y+dir[u][1]; tmp.step=head.step+1; if(tmp.x>=0&&tmp.x<r&&tmp.y>=0&&tmp.y<w) if(e[head.x][head.y]-abs(map[tmp.x][tmp.y]-map[head.x][head.y])>e[tmp.x][tmp.y]) { e[tmp.x][tmp.y]=e[head.x][head.y]-abs(map[tmp.x][tmp.y]-map[head.x][head.y]); q.push(tmp); } } } if(flag)cout<<"UNLUCKY!"<<endl; } int main() { //system("color 25"); while(cin>>r>>w) { while(!q.empty())q.pop();//注意这句话的重要性 //因为bfs里到达了目的地就退出了,并不一定清空,这样会导致wrong answer. cin>>energy>>fx>>fy; tmp.x=fx,tmp.y=fy,tmp.step=0; q.push(tmp); cin>>ex>>ey; int i,j; for(i=0;i<r;i++) for(j=0;j<w;j++){ cin>>map[i][j];e[i][j]=-1; } e[fx][fy]=energy; bfs(); } return 0; }