搜索练习题1215:迷宫



题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1215


【题目描述】

一天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
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=120;
 4 int n,xa,ya,xb,yb;
 5 bool flag;
 6 char ch;
 7 int vis[MAXN][MAXN];                    //为1表示不能通行,0表示可以通行
 8 int dir[4][2]={-1,0,1,0,0,-1,0,1};        //控制上下左右移动
 9 bool isp(int x,int y){
10     return x>=0&&x<n&&y>=0&&y<n;        //判断是否在范围里面
11 }
12 void dfs(int x,int y){
13     for(int i=0;i<4;i++){
14         int nx=x+dir[i][0];
15         int ny=y+dir[i][1];
16         if(isp(nx,ny)&&vis[nx][ny]==0){    //如果还没有访问过,则标记当前位置
17             vis[nx][ny]=1;
18             if(nx==xb&&ny==yb){            //达到指定位置则退出
19                 cout<<"YES"<<endl;
20                 flag=true;
21                 break;
22             } else{                        //没有到指定位置,则dfs
23                 dfs(nx,ny);
24             }
25         }
26     }
27 }
28 int main(){
29     int  h;
30     cin>>n;
31     while(n--){
32         memset(vis,0,sizeof(vis));
33         flag=false;
34         cin>>h;
35         for(int i=0;i<h;i++){
36             for(int j=0;j<h;j++){
37                 cin>>ch;
38                 if(ch==‘#‘)
39                     vis[i][j]=1;
40             }
41         }
42         cin>>xa>>ya;
43         cin>>xb>>yb;
44         if(vis[xa][ya]||vis[xb][yb]){        //直接在起始位置和终点位置判断是否可以通过
45             cout<<"NO"<<endl;
46             continue;
47         }else{
48             dfs(xa,xb);
49         }
50         if(!flag)
51             cout<<"NO"<<endl;
52     }
53     return 0;
54 }

还有问题QAQ



搜索练习题1215:迷宫

原文地址:https://www.cnblogs.com/ZKYAAA/p/12369524.html

时间: 2024-10-12 08:07:51

搜索练习题1215:迷宫的相关文章

BFS简单题套路_Codevs 1215 迷宫

BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 const int maxn = 20; struct Status { int r, c; Status(int r = 0, int c = 0) : r(r), c(c) {} // int DIR; }; int N; //迷宫数量 int W; //迷宫宽度 char map[maxn][maxn]; //地图 //方向 : 分别代表 上.右.下.左向量 int dir[4][2] = { {-1, 0

1215 迷宫

1215 迷宫 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走.从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO. 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量. 其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长

wikioi 1215 迷宫

1215 迷宫 6人推荐 收藏 发题解 题目描述 Description 在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走.从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO. 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量.  其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每行n个字符,字符之间没有空格分隔. 输出

搜索问题——POJ3984迷宫问题

Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. Input 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. Output 左上角到右下角的最短路径,格式如样例所示. Sa

广度优先搜索[再解迷宫]

上一节讲过深度优先搜索解决迷宫,http://blog.csdn.net/wtyvhreal/article/details/43268115 这一节讲解广度优先搜索解决迷宫. 广度优先搜索(Breadth First Search,BFS),也称为宽度优先搜索. 还是二维数组存储,开始小哼在(1,1)处,在深搜里我们先让小哼往右边走,然后一直尝试下去,直到走不通的时候再回到这里.这样是深搜,可以通过函数递归实现.广搜的方法:通过一层一层扩展的方法找到小哈.扩张的时候每发现一个点就将这个点加入到

数据结构之深度优先搜索(走迷宫)

在此以走迷宫为例: 给定迷宫起点和终点,看能否到达:(xt,yt) void f(int x,int y){ if(x<0||x>21||y<0||y>21){//判断是否超出迷宫 return; } ch[x][y]='#'; for(i=0;i<4;i++){if(ch[x][y]=='.'){ if(x==xt+1&&y==yt+1){ flag=1; return ; } //四个方向 f(x,y+1); f(x,y-1); f(x+1,y); f(x

codevs 1215 迷宫

时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在N*N的迷宫内,“#”为墙,“.”为路,“s”为起点,“e”为终点,一共4个方向可以走.从左上角((0,0)“s”)位置处走到右下角((n-1,n-1)“e”)位置处,可以走通则输出YES,不可以走则输出NO. 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量. 其后每个迷宫数据的第一行为一个整数n(n≤16),表示迷宫的边长,接下来的n行每

挑战程序2.1.4 穷竭搜索&gt;&gt;深度优先搜索 练习题 POJ1979黑与红

http://poj.org/problem?id=1979 Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black. A man is standing on a black tile. From a tile, he can move to one of four adjacent tiles. But he can't move

搜索练习题【题解】

VIJOS-P1026 毒药解药 Description Sample Input Sample Output HINT Source Solution POJ3321Apple Tree Description Input Output Sample Input Sample Output Source Solution VIJOS-P1026 毒药?解药? Description 羽毛笔和im是抽签到同一个考场的,她们突然闻到一阵刺鼻的化学试剂的气味. 机灵鼠:(头都不抬)你们是考生么?还在