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!
相关文章推荐
- NYOJ 499迷宫(简单dfs)
- nyoj 499迷宫【DFS】
- NYOJ 499 迷宫(DFS)
- nyoj499 + 迷宫 + dfs
- NYOJ499 迷宫 DFS
- ACM--DFS--nyoj 499--迷宫
- nyoj 499 迷宫(dfs)
- 【DFS】nyoj 82 迷宫寻宝(一)
- NYOJ306 走迷宫(二分+深搜DFS)
- NYOJ-499-迷宫
- NYOJ306 走迷宫(dfs+二分搜索)
- NYOJ 499 迷宫
- NYOJ - 82 - 迷宫寻宝(一) (DFS)
- nyoj——58 最小步数(DFS,BFS 迷宫问题)
- NYOJ 499 迷宫
- NYOJ 499 迷宫
- nyoj 82 迷宫寻宝(一)【dfs】
- nyoj306-走迷宫(dfs,二分枚举上下界)
- NYOJ499迷宫
- nyoj82 迷宫寻宝(一)(DFS 推荐看看)