走迷宫(Dfs)
2014-11-13 20:37
204 查看
走迷宫
Time Limit: 1000MS Memory limit: 65536K
题目描述
一个由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 种走法。示例输入
32 20 10 02 20 11 02 30 0 00 0 0
示例输出
104
提示
来源
#include <stdio.h> #include <string.h> #include <stdlib.h> int dis[110][110]; int vis[110][110]; int m,n,cnt; int fx[]={0,1,0,-1}; int fy[]={1,0,-1,0}; void dfs(int s,int e) { int i; int u,v; vis[s][e]=1; for(i=0;i<4;i++) { u=s+fx[i]; v=e+fy[i]; if(u>=1&&u<=100&&v>=1&&v<=100) { if(!vis[u][v]&&!dis[u][v]) { if(u==m&&v==n) cnt++; else dfs(u,v); } } } vis[s][e]=0;//注意。 } int main() { int T,i,j; scanf("%d",&T); while(T--) { cnt=0; memset(dis,1,sizeof(dis)); memset(vis,0,sizeof(vis)); scanf("%d %d",&m,&n); for(i=1;i<=m;i++) for(j=1;j<=n;j++) scanf("%d",&dis[i][j]); dfs(1,1); printf("%d\n",cnt); } return 0; }
相关文章推荐
- poj 3984 迷宫问题 dfs 求迷宫路径
- 深度优先搜索DFS(迷宫问题)
- DFS求解迷宫问题
- hdu 1072 有炸弹的迷宫 (DFS)
- 二维迷宫的一条路径-DFS
- PTA-地下迷宫探索(DFS,水题)
- POJ - 3984 - 迷宫问题 (DFS)
- 迷宫问题---深度搜索(dfs)
- 迷宫问题[1] DFS 不保证最短路径
- C# BFS DFS 迷宫寻径 深度优先算法 广度优先算法
- 迷宫问题(模板)(DFS)
- SDUT 1157-小鼠迷宫问题(BFS&DFS)
- SDUT 数据结构实验之图论四:迷宫探索 (DFS)
- HDOJ/HDU 1728 逃离迷宫 DFS 深度优先搜素
- HDU1728 逃离迷宫 DFS练习题
- 数据结构实验之图论四:迷宫探索(邻接表与DFS)
- poj 3984 迷宫问题 dfs 求迷宫路径
- 奥数等式与走迷宫Dfs实现
- HDU 1728 逃离迷宫(DFS||BFS)
- POJ 3984 迷宫问题 【DFS】