hdu1242

这题是搜索的好题,第一次做不会做,第二次还是勉强。。噗噗。。。要想真正会做,还是要自己想啊。。呜呜。。




//有多条路径,如何选出最短的那条就退出呢?
//  还以为是简单的bfs 但其实不是
//用优先队列  又做了一遍还是不对  
#include
#include
#include
#include
using namespace std;
int r,c;
char map[210][210];
bool vis[210][210];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct Node
{
    int x,y;
    int t;
    friend bool operator<(Node n1,Node n2)  
    {         
        return n2.t  q;
    q.push(s);
    while(!q.empty())
    {
        Node u=q.top();
        vis[u.x][u.y]=true;
        q.pop();
        for(int i=0;i<4;i++)
        {
            Node v;
            v.x=u.x+dx[i];
            v.y=u.y+dy[i];
            
            if(!vis[v.x][v.y] && v.x>=0 && v.x=0 && v.y>r>>c)
    {
        for(i=0;i>map[i][j];
            if(map[i][j]=='a'){s.x=i;s.y=j;s.t=0;vis[i][j]=false;}
            else if(map[i][j]=='r') {e.x=i;e.y=j; vis[i][j]=false;}
            else if(map[i][j]=='x')vis[i][j]=false;
            else if(map[i][j]=='.')vis[i][j]=false;
            else{vis[i][j]=true;}
          }  //边输入边初始化
        }
       int ans=bfs();
       if(ans==-1)printf("Poor ANGEL has to stay in the prison all his life.\n");
       else printf("%d\n",ans);
    }
}





你可能感兴趣的:(搜索,搜索)