#include#include #include #include #include #include #include #define maxn 101using namespace std;char mapp[maxn][maxn];int visited[maxn][maxn],n,m;int dir[4][2]={ { 0,1},{ 1,0},{-1,0},{ 0,-1}};struct node{ int x; int y; int second; int x_next; int y_next; friend bool operator< (node a, node b){ return a.second > b.second;} //按照时间顺序从小到大};node path[maxn][maxn];node en;stack S;priority_queue pq;int bfs(){ while(!pq.empty()){ node temp,next; temp=pq.top(); if(temp.x==n-1&&temp.y==m-1){ en.x=temp.x; en.y=temp.y; en.x_next=0; en.y_next=0; return temp.second; } pq.pop(); for(int i=0;i<4;i++){ next.x=temp.x+dir[i][0]; next.y=temp.y+dir[i][1]; if(next.x>=0&&next.x =0&&next.y '0'&&mapp[next.x][next.y]<='9'){ next.second=temp.second+1+(mapp[next.x][next.y]-'0'); visited[next.x][next.y]=1; temp.x_next=next.x; temp.y_next=next.y; path[next.x][next.y]=temp; // cout< <<" "< < >n>>m){ memset(visited,0,sizeof(visited)); memset(mapp,0,sizeof(mapp)); memset(path,0,sizeof(path)); while(!pq.empty()) pq.pop(); for(int i=0;i >mapp[i][j]; } } visited[0][0]=1; node t1; t1.x=0;t1.y=0;t1.second=0; pq.push(t1); int t=bfs(); if(t==-1) cout<<"God please help our poor hero."< (%d,%d)\n", num ++, temp.x, temp.y, temp.x_next, temp.y_next); } else if(mapp[temp.x][temp.y] >='0' && mapp[temp.x][temp.y] <= '9'){ int t = mapp[temp.x][temp.y] - '0'; while(t --){ printf("%ds:FIGHT AT (%d,%d)\n", num ++, temp.x, temp.y); } if(!(temp.x_next == 0 && temp.y_next == 0)){ printf("%ds:(%d,%d)->(%d,%d)\n", num ++, temp.x, temp.y, temp.x_next, temp.y_next); } } } } printf("FINISH\n"); } return 0;}