#include<iostream>
#include<algorithm>
#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
char f[52][52];
bool vis[52][52];
int Ex,Ey,N,M;
const int dir[4][2]={-1,0,1,0,0,1,0,-1};
struct Data
{int time;
int x,y;};
struct cmp
{
bool operator() (Data a,Data b)
{
return a.time>b.time;
}
};
priority_queue<Data,vector<Data>,cmp>Q;
void BFS()
{
while(!Q.empty())Q.pop();
memset(vis,0,sizeof(vis));
Data t,elem;
t.time=0;t.x=t.y=1;Q.push(t);
int nx,ny;vis[1][1]=true;
while(!Q.empty())
{
t=Q.top();Q.pop();
if(t.x==Ex&&t.y==Ey){printf("%d\n",t.time);break;}
for(int i=0;i<4;i++)
{
nx=t.x+dir[i][0];
ny=t.y+dir[i][1];
if(nx>0&&nx<=N&&ny>0&&ny<=M&&!vis[nx][ny])
{
elem.time=t.time+(f[nx][ny]=='#'?4:1);
elem.x=nx;elem.y=ny;
Q.push(elem);
vis[nx][ny]=true;
}
}
}
}
int main()
{
while(~scanf("%d%d",&N,&M))
{
for(int i=1;i<=N;i++)
scanf("%s",f[i]+1);
scanf("%d%d",&Ex,&Ey);
BFS();
}
}
NYOJ 635优先队列
最新推荐文章于 2021-03-13 09:01:57 发布