算法练习-NOJ-1009-迷宫问题
2015-04-10 22:27
381 查看
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。
输入
多个测例。输入的第一行是一个整数n,表示测例的个数。接下来是n个测例,每个测例占21行,第一行四个整数x1,y1,x2,y2是起止点的位置(坐标从零开始),(x1,y1)是起点,(x2,y2)是终点。下面20行每行20个字符,’.’表示空格;’X’表示墙。
输出
每个测例的输出占一行,输出Yes或No。
输入样例
2
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXXX
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
输出样例
No
Yes
描述
给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。
输入
多个测例。输入的第一行是一个整数n,表示测例的个数。接下来是n个测例,每个测例占21行,第一行四个整数x1,y1,x2,y2是起止点的位置(坐标从零开始),(x1,y1)是起点,(x2,y2)是终点。下面20行每行20个字符,’.’表示空格;’X’表示墙。
输出
每个测例的输出占一行,输出Yes或No。
输入样例
2
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXXX
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
………………..
0 0 19 19
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
XXXXXXXXXXXXXXXXXXX.
………………..
.XXXXXXXXXXXXXXXXXXX
………………..
输出样例
No
Yes
#include<stdio.h> int move[4][2]={0,1,1,0,0,-1,-1,0}; char ch[22][22]; int xt,yt; int flag; void f(int x,int y) { int row=21; int column=21; int i; ch[x][y]='#'; for(i=0;i<4;i++){ x=x+move[i][0]; y=y+move[i][1]; if(ch[x][y]=='.'){ if(x==xt+1&&y==yt+1) {flag=1;return ; } f(x,y); } x=x-move[i][0]; y=y-move[i][1]; } } int main(void) { int x,y; int i,j; int n; scanf("%d",&n); while(n--){ scanf("%d%d%d%d",&x,&y,&xt,&yt); getchar(); flag=0; //初始化 for(i=0;i<=21;i++){ ch[i][0]='X'; ch[i][21]='X'; } for(i=0;i<=21;i++){ ch[0][i]='X'; ch[21][i]='X'; } //输入迷宫 for(i=1;i<=20;i++){ for(j=1;j<=20;j++) scanf("%c",&ch[i][j]); getchar(); } //调用函数 f(x+1,y+1); //打印 if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- 算法练习-NOJ-1005-装载问题
- 算法练习-NOJ-1008-素数环问题
- 算法练习-NOJ-1004-01背包问题
- 算法练习-NOJ-1007-8皇后问题
- 算法练习-NOJ-1006-堡垒问题
- 算法练习-NOJ-1141-走迷宫
- 算法练习-NOJ-1045-六数码问题
- 贪心算法练习:数列极差问题
- 回溯算法之迷宫问题
- 榆木脑壳练算法之迷宫寻路问题
- C语言 解决迷宫问题练习
- 遗传算法解迷宫问题
- 基础迷宫问题-------------(图的BFS 题目取自算法竞赛入门)
- 蛙蛙推荐:算法练习:最大间隙问题
- 算法基础——2.7练习(通信编码、格式检查问题)
- Project Ruler 算法练习之除数问题
- 回溯算法基础---皇后问题,骑士游历,迷宫求解
- 算法分析——走迷宫问题
- C语言链栈以及回溯算法解决迷宫问题
- 算法:队列与广度优先搜索(迷宫问题)