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 }

 

转载于:https://www.cnblogs.com/zwfymqz/p/6773166.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值