1215:迷宫

简介: 1215:迷宫

1215:迷宫

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。

【输入】

第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 ≤ n ≤ 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。

【输出】

k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。

【输入样例】

2

3

.##

..#

#..

0 0 2 2

5

.....

###.#

..#..

###..

...#.

0 0 4 0

【输出样例】

YES

NO

【来源】

No

1. //深搜
2. #include<iostream>
3. #include<cstdio>
4. using namespace std;
5. int dx[4]={0,1,0,-1};
6. int dy[4]={-1,0,1,0};
7. int k,n,ya,xa,yb,xb;
8. char str;
9. bool s[101][101],tem;
10. int nx,ny;
11. int dfs(int y,int x)
12. {
13.   for(int i=0;i<4;i++){
14.     nx=x+dx[i];
15.     ny=y+dy[i];
16.     if(nx>=0&&nx<n&&ny>=0&&ny<n&&(!s[ny][nx])){
17.       s[ny][nx]=true;
18.       if(nx==xb&&ny==yb){
19.         cout<<"YES"<<endl;
20.         tem=true;
21.         break;
22.       }
23.       else dfs(ny,nx);
24.     }
25.   }
26. }
27. int main()
28. {
29.   cin>>k;
30.   for(int t=1;t<=k;t++){
31.     cin>>n;
32.     tem=false;
33.     for(int i=0;i<n;i++)
34.       for(int j=0;j<n;j++){
35.         cin>>str;
36.         if(str=='.') s[i][j]=false;
37.         else s[i][j]=true;
38.       }
39.     cin>>ya>>xa>>yb>>xb;
40.     if(s[ya][xa]||s[yb][xb]){
41.       cout<<"NO"<<endl;
42.       continue;
43.     }
44.     else dfs(ya,xa);
45.     if(!tem) cout<<"NO"<<endl;
46.   }
47.   return 0;
48.  }
1. //广搜
2. #include<iostream>
3. #include<cstdio>
4. #include<cstring>
5. using namespace std;
6. int dx[4]={0,1,0,-1};
7. int dy[4]={-1,0,1,0};
8. bool a[101][101];
9. char c[101][101]={0};
10. int dl[10005][4];
11. int main()
12. {
13.   int k,n,x,y,xl,yl,xx,yy,t,w,f,s;
14.   cin>>k;
15.   for(int s=1;s<=k;s++){
16.     memset(a,0,sizeof(a));
17.     memset(dl,0,sizeof(dl));
18.     t=1,w=2,f=0;
19.     cin>>n;
20.     for(int i=0;i<n;i++)
21.       for(int j=0;j<n;j++) cin>>c[i][j];
22.     cin>>x>>y>>xl>>yl;
23.     if(c[x][y]=='#'||c[xl][yl]=='#')  cout<<"NO"<<endl;
24.     else {
25.       a[x][y]=true;
26.       dl[1][1]=x;
27.       dl[1][2]=y;
28.       while(t<w){
29.         for(int i=0;i<4;i++){
30.           xx=dl[t][1]+dx[i];
31.           yy=dl[t][2]+dy[i];
32.           if(xx<0||xx>n-1||yy<0||yy>n-1) continue;
33.           if(c[xx][yy]!='#'&&!a[xx][yy]){
34.             a[xx][yy]=true;
35.             dl[w][1]=xx;
36.             dl[w][2]=yy;
37.             w++; 
38.           }
39.           if(xx==xl&&yy==yl){
40.             cout<<"YES"<<endl;
41.             f=1;
42.             break;
43.           }
44.         }
45.         if(f==1) break;
46.         t++;
47.       }
48.       if(f==0) cout<<"NO"<<endl;
49.     }
50.   }
51.   return 0;
52.  }

 

相关文章
|
存储 NoSQL 关系型数据库
支持中低频量化交易的单机数据平台
支持中低频量化交易的单机数据平台,使用InfluxDB存储实时交易数据,HDF5存储静态历史数据用于回测。
5299 0
|
8月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
机器学习/深度学习 安全 算法
应用级网关防火墙
【8月更文挑战第17天】
562 4
|
云安全 存储 人工智能
云启智能新纪元,2024可信云大会亮点抢先看!
2024年可信云大会将于7月23-24日在京举行,聚焦云计算与人工智能融合,探讨智算服务与大模型云服务。
640 0
|
测试技术 API Apache
使用 Apache JMeter 吞吐量控制器的详细指南
Apache JMeter是开源的负载和性能测试工具,其吞吐量控制器用于控制采样器执行频率以达到特定吞吐量。要使用它,首先启动JMeter,创建测试计划,添加线程组和逻辑控制器。配置吞吐量控制器的参数,如总执行次数或百分比,并添加HTTP请求采样器。例如,创建两个控制器,一个设定执行次数,另一个设定执行百分比。通过监听器如汇总报告和查看结果树来分析测试结果,从而模拟不同负载并识别性能瓶颈。吞吐量控制器是实现复杂测试场景的关键组件。
|
SQL 存储 Python
Microsoft SQL Server 编写汉字转拼音函数
Microsoft SQL Server 编写汉字转拼音函数
|
机器学习/深度学习 分布式计算 大数据
【大数据技术】Spark MLlib机器学习特征抽取 TF-IDF统计词频实战(附源码和数据集)
【大数据技术】Spark MLlib机器学习特征抽取 TF-IDF统计词频实战(附源码和数据集)
246 1
Leecode之合并两个有序链表
Leecode之合并两个有序链表
|
设计模式 缓存 算法
带你手撸一个Kotlin版的EventBus
EventBus的优点有很多(现在来看也并不是优点):代码简洁,是一种发布订阅设计模式(观察者设计模式),简化了组件之间的通讯,分离了事件的发送者和接收者,而且可以随意切换线程,避免了复杂的和易错的依赖关系和生命周期问题
635 0
带你手撸一个Kotlin版的EventBus