NYOJ 499迷宫(简单dfs)
2015-06-30 10:29
316 查看
迷宫
时间限制:1000 ms | 内存限制:65535 KB难度:4
描述 一个由 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 2 2 0 1 0 0 2 2 0 1 1 0 2 3 0 0 0 0 0 0
样例输出
1 0 4
ac代码:
#include<stdio.h> #include<string.h> int map[205][205];//地图 int num,m,n; int v[205][205];//标记 void dfs(int x,int y) { if(x<0||x>=m||y<0||y>=n||map[x][y]||v[x][y])//如果用check调用函数,会TLE return; else { if(x==m-1&&y==n-1) { num++; return; } v[x][y]=1; dfs(x,y-1); dfs(x,y+1); dfs(x-1,y); dfs(x+1,y); v[x][y]=0; } } int main() { int t,i,j; scanf("%d",&t); while(t--) { num=0; memset(v,0,sizeof(v)); scanf("%d%d",&m,&n);//m行n列 for(i=0;i<m;i++) for(j=0;j<n;j++) scanf("%d",&map[i][j]); dfs(0,0); printf("%d\n",num); } return 0; }
相关文章推荐
- 6月第3周网络安全报告:境内感染网络病毒主机55.4万
- android-percent-support-lib-sample
- 朴素贝叶斯分类器
- jquery提交表单错误
- 并行计算基础&编程模型与工具
- Memcached学习笔记 — 第五部分-Memcached分布式实现
- 每天收获一点点------自定义类型处理手机上网日志
- 慕课第5次学习总结
- 应用如何去调用系统中的应用
- javaScript注意技巧
- 动态规划三部曲之01背包问题的分析和实现(二)
- 黑马程序员——Java基础之多态、内部类
- [MFC] 关于OnPaint()
- 大型商贸系统(进货管理)技术解析(五)自营无订单进仓冲红单
- bzoj3632
- WebService(2)-XML系列之Java和Xml之间相互转换
- word转成pdf有什么方法
- brk()和sbrk()函数的使用
- 删除重复项的几种方法
- mysql安装最后一步 Apply Security Settings 出错