hdu2822 Dogs【优先队列】

来源:互联网 发布:织梦cms好用吗 编辑:程序博客网 时间:2024/06/01 07:45
#include<bits/stdc++.h>using namespace std;struct node{    int x,y,t;    friend bool operator <(node n1,node n2)    {        return n2.t<n1.t;    }}tp,p;char g[1024][1024];int n,m,a0,a1,b0,b1,vis[1024][1024];int dx[]={0,0,-1,1};int dy[]={1,-1,0,0};int bfs(){    memset(vis,0xff,sizeof(vis));    priority_queue<node>q;    vis[a0][b0]=0;    tp.x=a0;    tp.y=b0;    tp.t=0;    q.push(tp);    while(!q.empty())    {        tp=q.top();        q.pop();        if(tp.x==a1&&tp.y==b1)            return tp.t;        for(int i=0;i<4;i++)        {            p.x=tp.x+dx[i];            p.y=tp.y+dy[i];            p.t=tp.t;            if(p.x<1||p.x>n||p.y<1||p.y>m) continue;            if(g[p.x][p.y]=='.') p.t++;            if(vis[p.x][p.y]>p.t||vis[p.x][p.y]==-1)            {                vis[p.x][p.y]=p.t;                q.push(p);            }        }    }}int main(){    while(~scanf("%d%d",&n,&m))    {        if(n==0&&m==0) break;        for(int i=1;i<=n;i++)            scanf("%s",g[i]+1);        scanf("%d%d",&a0,&b0);        scanf("%d%d",&a1,&b1);        printf("%d\n",bfs());    }    return 0;}
0 0
原创粉丝点击