走迷宫(回溯、深搜)判断能否到终点
2012-07-10 21:15
162 查看
时限:1000ms 内存限制:10000K 总时限:3000ms 描述:
判断是否能从迷宫的入口到达出口
输入: 先输入两个整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。
输出: 若能到达,则输出"Yes",否则输出"No",结果占一行。
输入样例:
3 3
0 0
2 2
0 0 0
1 1 0
0 1 0
输出样例:
Yes
输入样例:
12 12
1 8
10 7
1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 1 0 1 1 1
1 0 1 0 1 1 0 0 0 0 0 1
1 0 1 0 1 1 0 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 0 1
1 0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 0 1 0 1
1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
输出样例:
Yes
判断是否能从迷宫的入口到达出口
输入: 先输入两个整数表示迷宫的行数m和列数n,再输入口和出口的坐标,最后分m行输入迷宫,其中1表示墙,0表示空格每个数字之间都有空格。
输出: 若能到达,则输出"Yes",否则输出"No",结果占一行。
输入样例:
3 3
0 0
2 2
0 0 0
1 1 0
0 1 0
输出样例:
Yes
输入样例:
12 12
1 8
10 7
1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 1 0 1 1 1
1 0 1 0 1 1 0 0 0 0 0 1
1 0 1 0 1 1 0 1 1 1 0 1
1 0 1 0 0 0 0 0 1 0 0 1
1 0 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 0 1 0 0 0 0 1
1 0 1 1 1 0 0 0 1 1 1 1
1 0 0 0 0 0 1 0 0 0 0 1
1 1 1 0 1 1 1 1 0 1 0 1
1 1 1 1 1 1 1 0 0 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
输出样例:
Yes
#include<stdio.h> int Arr[30][30];//最大迷宫为30*30 int Rownum=0,Colnum=0;//行列数 int Beginrow,Begincol,Endrow,Endcol;//终点坐标 int state=0;//迷宫走通与否状态 int canplace(int row,int col)//判断当前点能否走通 { if(row>=0 &&col>=0 &&row<Rownum &&col<Colnum &&Arr[row][col]==0)//为越界且可走通 return 1; return 0; } void search(int row,int col) { if(row==Endrow && col==Endcol)//是目标终点 { state=1; return ; } int r,c; Arr[row][col]=1;//对可走通的点进行标记 r=row-1; c=col; //上 if(canplace(r,c)) search(r,c); r=row; c=col+1;//右 if(canplace(r,c)) search(r,c); r=row+1; c=col;//下 if(canplace(r,c)) search(r,c); r=row; c=col-1;//左 if(canplace(r,c)) search(r,c); } int main() { int i,j; scanf("%d%d",&Rownum,&Colnum);//输入迷宫行列数 scanf("%d%d%d%d",&Beginrow,&Begincol,&Endrow,&Endcol);//起始点,终点坐标 for(i=0;i<Rownum;i++) for(j=0;j<Colnum;j++) scanf("%d",&Arr[i][j]); //一行一行的输入迷宫布局 Arr[Beginrow][Begincol]=1; search(Beginrow,Begincol); //一个迷宫搜索路径后的最终状态,起始点接通与否 if(state==1) printf("Yes\n"); else printf("No\n"); return 0; }
相关文章推荐
- 深度优先算法--判断迷宫的一个起点能否到达一个终点
- 迷宫问题1-在给定的迷宫中判断是否存在一条路径从起点到终点
- 判断数abcdef能否被11、12整除
- FOJ 1205 小鼠迷宫问题【BFS+dfs回溯查找路径】
- python小练习5:如何判断一个数能否被3整除
- (hdu step 4.2.7)逃离迷宫(在有转弯次数的限制的情况下,判断一个点是否能到另一个点)
- 小希的迷宫------幷查集判断是否有环,是否是独立的一棵树
- 判断能否构成三角形 并输出三角形的周长和面积
- 如何判断三角形能否构成以及三角形的类型
- C++判断四个点能否构成正方形(续)
- hdu 5971 Wrestling Match 判断能否构成二分图 [Problem A]2016ACM/ICPC亚洲区大连站
- HDU 5373 The shortest problem(判断一个数能否被11整除)
- 回溯法解迷宫问题
- 水题 判断能否被4整除或者含 有4
- asp.net如何判断网址能否打开
- 判断一个正整数能否表示为两个质数之和
- HDU 1272 小希的迷宫 (并查集判断回路、连通)
- 回溯法求迷宫
- 搜索之广度优先【三维迷宫】(判断从一点能否到达另一点,最少走几步)
- HDU - 1272 小希的迷宫 并查集集合数判断