sdut oj2449 走迷宫(DFS)
来源:互联网 发布:魔鬼积木知乎 编辑:程序博客网 时间:2024/04/29 03:37
题目链接:点击打开链接
走迷宫
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 <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>using namespace std;int s[10][10] = {0};///等于0时表示没有来过这个坐标int n,m,num = 0;int mp[10][10];///记录0,1,表示地图int dx[] = {0,0,1,-1};int dy[] = {-1,1,0,0};///表示四个方向int flag(int x,int y)///判断该点是否在地图中并且保证没来过这个坐标而且可以通过{ if(x >= 1&&x <= n&&y >= 1&&y <= m&&!s[x][y]&&!mp[x][y]) return 1; return 0;}void DFS(int x,int y){ if(x == n&&y == m) { num++;///每次到达(n,m)时路径+1 } s[x][y] = 1; for(int i = 0;i < 4;i++)///遍历四个方向 { if(flag(x + dx[i],y + dy[i])) { s[x + dx[i]][y + dy[i]] = 1; DFS(x + dx[i],y + dy[i]);///每次到达新的位置都进行递归调用 s[x + dx[i]][y + dy[i]] = 0; } }}int main(){ int t; scanf("%d",&t); while(t--) { num = 0; memset(mp,0,sizeof(mp));///对地图进行清零 scanf("%d%d",&n,&m); for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { scanf("%d",&mp[i][j]); } } DFS(1,1);///从点(1,1)开始 printf("%d\n",num); } return 0;}
0 0
- sdut oj2449 走迷宫(DFS)
- SDUT 走迷宫(DFS)
- SDUT-1269 走迷宫(DFS)
- SDUT 1269走迷宫(DFS+打印路径)
- [SDUT](2449)走迷宫 ---DFS(图)
- [SDUT](1269)走迷宫 ---DFS(图)
- 【DFS】SDUT 2449 走迷宫 求走的方法次数
- SDUT 1269-走迷宫(DFS打印路径)
- SDUT OJ 走迷宫
- SDUT 2449 走迷宫
- SDUT 1269 走迷宫
- SDUT 1269 走迷宫
- sdut 走迷宫
- SDUT 1269 走迷宫
- SDUT-走迷宫
- SDUT 1269 走迷宫
- SDUT OJ 2449 走迷宫
- SDUT OJ 2449 走迷宫
- 图的存储(邻接表)
- 结构体
- 使用PHP_UML生成代码的UML图
- Android文件上传
- JAVA 项目监听文件是否发生变化
- sdut oj2449 走迷宫(DFS)
- Android动画知识点整理
- Python-数据库操作-pymysql
- ios TouchID的使用
- SPL
- java hashmap循环内删除元素
- Android中View动画的学习掌握(补间动画,属性动画)
- [KMP next树] BZOJ 3670 [Noi2014]动物园
- Android6.0 Framework分析——应用程序APP的安装过程