您的位置:首页 > 编程语言 > C语言/C++

NYOJ 499迷宫(DFS)

2016-08-06 09:28 155 查看

迷宫

时间限制:1000ms|内存限制:65535KB[align=center]难度:4[/align]描述一个由n*m个格子组成的迷宫,起点是(1,1),终点是(n,m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数。输入第一行一个整数T表示有T组测试数据。(T<=110)对于每组测试数据:第一行两个整数n,m,表示迷宫有n*m个格子。(1<=n,m<=6,(n,m)!=(1,1))接下来n行,每行m个数。其中第i行第j个数是0表示第i行第j个格子可以走,否则是1表示这个格子不能走,输入保证起点和终点都是都是可以走的。任意两组测试数据间用一个空行分开。输出对于每组测试数据,输出一个整数R,表示有R种走法。样例输入
3
22
01
00

22
01
10

23
000
000
样例输出
1
0
4
#include<stdio.h>#include<string.h>intr,n,m;intmap[8][8];voidDFS(inti,intj){if(i==n&&j==m)//递归出口{r++;return;}map[i][j]=1;//标记if(!map[i+1][j])DFS(i+1,j);//上if(!map[i-1][j])DFS(i-1,j);//下if(!map[i][j+1])DFS(i,j+1);//右if(!map[i][j-1])DFS(i,j-1);//左map[i][j]=0;//清除标记}intmain(){intt,i,j;scanf("%d",&t);while(t--){r=0;scanf("%d%d",&n,&m);memset(map,-1,sizeof(map));//外圈加一层墙,就不用判断越界的情况了for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d",&map[i][j]);//输入}}DFS(1,1);printf("%d\n",r);}return0;}
Fighting!

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DFS C语言