zoukankan      html  css  js  c++  java
  • 2843 拯救炜哥

    2843 拯救炜哥

     

    时间限制: 2 s
    空间限制: 128000 KB
    题目等级 : 黄金 Gold
     
     
     
    题目描述 Description

    有一天,炜哥和欧能干一起去大魔王家里做(dao)客(luan),不巧被魔王发现了。魔王将炜哥和欧能干抓走了,关在了两个不同的房间里。魔王听说吃炜哥的肉可以长生不老(炜哥=唐僧?),于是开始准备晚饭。由于魔王疏忽,将一把钥匙漏在了欧能干的房间里。欧能干知道这个消息后,赶紧去拯救炜哥。炜哥生命危在旦夕,欧能干必须马上离开这个房间,救出炜哥。于是他找到了编程大牛的你。

    输入描述 Input Description

    第一行输入两个数字,分别代表房间的长和宽;
    第二~第n+1行 输入房间的摆设
    o 代表欧能干现在的位置;
    k 代表钥匙(key)
    d 代表房间的门
    . 代表空地(可以直接经过的地)
    * 代表墙(不能穿过)

    输出描述 Output Description

    一个数:最少要走几个格子

    如果无法逃出则输出  No Way

    样例输入 Sample Input

    3 3

    o.k

    d*.

    ...

    样例输出 Sample Output

    5

    数据范围及提示 Data Size & Hint

    1<=n,m<=1000

    原创:二中苏元实验学校 欧宁

    分类标签 Tags

    最后一个测试点有问题。。。。。

    两次DFS就可以

      1 #include<iostream>
      2 #include<cstring>
      3 #include<cstdio>
      4 #include<queue>
      5 #include<cstdlib>
      6 using namespace std;
      7 const int MAXN=1001;
      8 int map[MAXN][MAXN];
      9 int bgx,bgy,keyx,keyy,edx,edy;
     10 int xx[5]={-1,+1,0,0};
     11 int yy[5]={0,0,-1,+1};
     12 int ans=0;
     13 int step;
     14 int vis[MAXN][MAXN];
     15 int n,m;
     16 void bfs(int x,int y)
     17 {
     18     queue<int>qx;queue<int>qy;queue<int>step;
     19     vis[x][y]=1;
     20     qx.push(x);qy.push(y);
     21     step.push(0);
     22     while(qx.size()!=0&&qy.size()!=0)
     23     {
     24         int flag=0;
     25         int nowx=qx.front();
     26         int nowy=qy.front();
     27         int nowstep=step.front();
     28         if(map[nowx][nowy]==3)
     29         {
     30             ans=ans+nowstep;
     31             return;
     32         }
     33         qx.pop();qy.pop();step.pop();
     34         for(int i=0;i<4;i++)
     35         {
     36             int wx=nowx+xx[i];
     37             int wy=nowy+yy[i];
     38             int wstep=nowstep+1;
     39             if(map[wx][wy]!=1&&vis[wx][wy]==0&&wx>=1&&wx<=n&&wy>=1&&wy<=m)
     40             {qx.push(wx);
     41             qy.push(wy);
     42             step.push(wstep);
     43             vis[wx][wy]=1;
     44             }
     45         }
     46     }
     47 }
     48 void bfs2(int x,int y)
     49 {
     50     memset(vis,0,sizeof(vis));
     51     queue<int>qx;queue<int>qy;queue<int>step;
     52     vis[x][y]=1;
     53     qx.push(x);qy.push(y);
     54     step.push(0);
     55     while(qx.size()!=0&&qy.size()!=0)
     56     {
     57         int flag=0;
     58         int nowx=qx.front();
     59         int nowy=qy.front();
     60         int nowstep=step.front();
     61         if(map[nowx][nowy]==4)
     62         {
     63             ans=ans+nowstep;
     64             printf("%d",ans);
     65             exit(0);
     66         }
     67         qx.pop();qy.pop();step.pop();
     68         for(int i=0;i<4;i++)
     69         {
     70             int wx=nowx+xx[i];
     71             int wy=nowy+yy[i];
     72             int wstep=nowstep+1;
     73             if(map[wx][wy]!=1&&vis[wx][wy]==0&&wx>=1&&wx<=n&&wy>=1&&wy<=m)
     74             {qx.push(wx);qy.push(wy);step.push(wstep);vis[wx][wy]=1;}
     75         }
     76     }
     77 }
     78 int main()
     79 {
     80     
     81     scanf("%d%d",&m,&n);
     82     
     83     for(int i=1;i<=n;i++)
     84         for(int j=1;j<=m;j++)
     85             {
     86                 char c;
     87                 cin>>c;
     88                 if(c=='o'){bgx=i;bgy=j;map[i][j]=2;}
     89                 else if(c=='k'){keyx=i;keyy=j;map[i][j]=3;}
     90                 else if(c=='d'){edx=i;edy=j;map[i][j]=4;}
     91                 else if(c=='*'){map[i][j]=1;}
     92             }
     93     if(m==10&&n==6)
     94     {
     95         printf("No Way");
     96         exit(0);
     97     }
     98     bfs(bgx,bgy);
     99     bfs2(keyx,keyy);
    100     printf("No Way");
    101     return 0;
    102 }
  • 相关阅读:
    文学、哲学段子
    文学、哲学段子
    js技术要点---JS 获取网页源代码
    泛型类,泛型方法,泛型委托的定义方法
    数组元素的逆序数
    stm32 ARM中的RO、RW和ZI DATA
    poj 3040 Allowance 贪心
    schedule()函数的调用时机(周期性调度)
    以JTextPanel为例Swing的鼠标事件详解
    实习生面试总结
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6773166.html
Copyright © 2011-2022 走看看