zoukankan      html  css  js  c++  java
  • hdu 1242 ( Rescue )

     
    Problem : 1242 ( Rescue )     Judge Status : Accepted
    思路:优先队列+BFS 
    #include<iostream>
    #include
    <queue>
    #include
    <string>
    using namespace std;
    int n,m,ans;
    string a[200];
    int vis[200][200],ok;
    int dir[4][2]={-1,0,0,1,1,0,0,-1};
    struct node
    {
    int x,y,dis;
    node(
    int _x=0,int _y=0,int _dis=0):x(_x),y(_y),dis(_dis){};
    friend
    bool operator<(const node &a,const node & b)
    {
    return a.dis>b.dis;
    }
    };
    node s,e;
    void BFS()
    {
    ok
    =0;
    priority_queue
    <node> q;
    s.dis
    =0;
    q.push(s);
    vis[s.x][s.y]
    =1;
    while(!q.empty())
    {
    node t
    =q.top();
    q.pop();
    for(int k=0;k<4;k++)
    {
    int i=t.x+dir[k][0];
    int j=t.y+dir[k][1];
    if(i>=0&&i<n&&j>=0&&j<m&&!vis[i][j]&&a[i][j]!='#')
    {
    vis[i][j]
    =1;
    if(a[i][j]=='x')
    {
    q.push(node(i,j,t.dis
    +2));
    }
    else if(a[i][j]=='.')
    {
    q.push(node(i,j,t.dis
    +1));
    }
    else if(a[i][j]=='a')
    {

    ans
    =t.dis+1;
    ok
    =1;
    return;
    }
    }
    }
    }
    }
    int main()
    {

    while(cin>>n>>m)
    {
    memset(vis,
    0,sizeof(vis));
    for(int i=0;i<n;i++)
    {
    cin
    >>a[i];
    for(int j=0;j<m;j++)
    {
    if(a[i][j]=='a'){e.x=i;e.y=j;}
    if(a[i][j]=='r'){s.x=i,s.y=j;}
    }
    }
    BFS();
    if(ok)cout<<ans<<endl;
    else cout<<"Poor ANGEL has to stay in the prison all his life."<<endl;
    }
    }
  • 相关阅读:
    struts2简介
    项目整合SpringDataRedis
    SpringDataRedis入门Demo
    包管理-rpm
    文件查找与压缩
    N042第一周
    Shell
    Linux下终端字体颜色设置方法
    文本处理工具作业
    正则表达式
  • 原文地址:https://www.cnblogs.com/sook/p/1992877.html
Copyright © 2011-2022 走看看