#include
#include
#include
using namespace std;
#define maxn 105
struct Node//优先队列插入的节点是结构体类型,要在结构体中重载比较操作符函数。
{
int x,y;
int time;
friend bool operator < (Node a,Node b)
{
return a.time>b.time;
}
};
struct mpp
{
int x,y;
char c;
}mp[maxn][maxn];
int n,m,fight[maxn][maxn],visit[maxn][maxn];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int bfs()
{
Node now,next;
if(mp[n-1][m-1].c>'0'&&mp[n-1][m-1].c<='9')
{
now.time=mp[n-1][m-1].c-'0';
fight[n-1][m-1]=mp[n-1][m-1].c-'0';
}
else
now.time=0;
now.x=n-1,now.y=m-1;
priority_queue q;
q.push(now);
while(!q.empty())
{
now=q.top();
q.pop();
if(now.x==0&&now.y==0)
return now.time;
for(int i=0;i<4;i++)
{
next.x=now.x+dir[i][0];
next.y=now.y+dir[i][1];
if(next.x>=0&&next.x=0&&next.y'0'&&mp[next.x][next.y].c<='9'&&!visit[next.x][next.y])
{
next.time=now.time+mp[next.x][next.y].c-'0'+1;
fight[next.x][next.y]=mp[next.x][next.y].c-'0';
}
q.push(next);
mp[next.x][next.y].x=now.x;
mp[next.x][next.y].y=now.y;
visit[next.x][next.y]=1;
}
}
}
return -1;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
getchar();
int time;
memset(fight,0,sizeof(fight));
memset(visit,0,sizeof(visit));
for(int i=0;i(%d,%d)\n",t++,x,y,nx,ny);
for(int i=0;i
java版 交题的时候把t4改为Main
import java.util.*;
public class t4
{
int n,m;
char [][]mp;
int [][]vis;
Node [][]roads;
int time,flag;
int dr[]={1,-1,0,0};
int dc[]={0,0,1,-1};
public static void main(String args[])
{new t4().run();}
public void run()
{
Scanner cin=new Scanner(System.in);
while(cin.hasNextInt())
{
n=cin.nextInt();
m=cin.nextInt();
mp=new char[n][m];
roads=new Node[n][m];
vis=new int[n][m];
String str;
cin.nextLine();
for(int i=0;i q= new PriorityQueue<>();
Node p = new Node();
q.offer(p);
vis[0][0] = 1;
while (!q.isEmpty())
{
p=q.poll();
if(p.x==n-1&&p.y==m-1)
{
time=p.cnt;
flag=1;
return ;
}
for (int i=0;i<4;i++)
{
int r=p.x+dr[i];
int c=p.y+dc[i];
if (r>=0&&r=0&&c S=new Stack<>();
Node temp=new Node(n-1,m-1,time);
while(temp.x!=0||temp.y!=0)
{
S.push(temp);
temp=roads[temp.x][temp.y];
}
int t=1,px=0,py=0;
while(!S.isEmpty())
{
temp=S.peek();
S.pop();
System.out.printf("%ds:(%d,%d)->(%d,%d)\n",t++,px,py,temp.x,temp.y);
if(mp[temp.x][temp.y]!='.')
for(int i=0;i
{
int x,y,cnt;
public Node()
{
x=0;
y=0;
cnt=0;
}
public Node(int x,int y,int cnt)
{
this.x=x;
this.y=y;
this.cnt=cnt;
}
public int compareTo(Node A)
{return this.cnt>A.cnt ? 1:-1;}
}
}