数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
走迷宫
Time Limit: 1000MS Memory limit: 65536K
题目描述
一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数。
输入
对于每组测试数据:
第一行两个整数n, m,表示迷宫有n * m 个格子。(1 <= n, m <= 6, (n, m) !=(1, 1) ) 接下来n 行,每行m 个数。其中第i 行第j 个数是0 表示第i 行第j 个格子可以走,否则是1 表示这个格子不能走,输入保证起点和终点都是都是可以走的。
任意两组测试数据间用一个空行分开。
输出
示例输入
3
2 2
0 1
0 0
2 2
0 1
1 0
2 3
0 0 0
0 0 0
示例输出
1
0
4
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; unsigned int map[6][6];
bool vis[6][6];
int dir[4][2]={{0, -1}, {0, 1}, {1, 0}, {-1, 0} }; //四个深搜的方向 int cnt; //记录方法数
int n, m; void dfs(int x, int y)
{
int i, j;
int xx, yy; for(i=0; i<4; i++)
{
xx=x+dir[i][0];
yy=y+dir[i][1]; //进行了一次位置的转移 if( xx>=0 && xx<n && yy>=0 && yy<m && map[xx][yy]==0 && vis[xx][yy]==false ) //如果可以走
{
if(xx==n-1 && yy==m-1)
{
cnt++;
continue;
}
else
{
vis[xx][yy]=true; //标记该点已走
dfs(xx, yy); //从当前点出发继续向四个方向dfs
vis[xx][yy]=false; //当从该点的dfs结束之后,要将该点标记为未走状态,
//因为可能会有其它的路径要经过该点,但是如果不标记,
//就会造成死循环
}
}
}
} int main()
{
int t;
cin>>t;
int i, j; while(t--)
{
cin>>n>>m;
cnt=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
cin>>map[i][j];
vis[i][j]=false;
}
}
vis[0][0]=true;
dfs(0, 0);
cout<<cnt<<endl;
}
return 0;
}
数据结构之 栈与队列--- 走迷宫(深度搜索dfs)的更多相关文章
- 学习javascript数据结构(一)——栈和队列
前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...
- python数据结构之栈与队列
python数据结构之栈与队列 用list实现堆栈stack 堆栈:后进先出 如何进?用append 如何出?用pop() >>> >>> stack = [3, ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- PHP数据结构:栈、队列、堆、固定数组
数据结构:栈 队列: 堆: 固定尺寸的数组:
- 算法与数据结构(二) 栈与队列的线性和链式表示(Swift版)
数据结构中的栈与队列还是经常使用的,栈与队列其实就是线性表的一种应用.因为线性队列分为顺序存储和链式存储,所以栈可以分为链栈和顺序栈,队列也可分为顺序队列和链队列.本篇博客其实就是<数据结构之线 ...
- 数据结构之栈和队列及其Java实现
栈和队列是数据结构中非常常见和基础的线性表,在某些场合栈和队列使用很多,因此本篇主要介绍栈和队列,并用Java实现基本的栈和队列,同时用栈和队列相互实现. 栈:栈是一种基于“后进先出”策略的线性表.在 ...
- python——python数据结构之栈、队列的实现
这个在官网中list支持,有实现. 补充一下栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIF ...
- JS数据结构的栈和队列操作
数据结构:列表.栈.队列.链表.字典.散列.图和二叉查找树! 排序算法:冒牌.选择.插入.希尔.归并和快速! 查找算法:顺序查找和二分查找 在平时工作中,对数组的操作很是平常,它提供了很多方法使用,比 ...
随机推荐
- springmvc简单的xml文件配置步骤
1.配置web.xml的servlet标签,在此标签中配置服务器配置文件 2.配置web.xml的servlet-mapping标签 3.配置application.xml的自动扫描包的位置 4.配置 ...
- msp430项目编程56
msp430综合项目---扩展项目六56 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结
- Day 4 Linux基础
Linux基础(指令篇) 一.Linux命令 1.Linux命令行的语法格式: 命令+选项+参数 命令:告诉Linux(UNIX)操作系统做(执行)什么. 选项:说明命令运行的方式(可以改变命令的功能 ...
- SGU101 求有重边的无向图欧拉迹
题意:好多木棒,俩端有数字(0--6)标记,按数字相同的端首尾相连成一条直线(木棒可以相同).即求有重边的无向图欧拉迹. 先判定是否为欧拉图,俩个条件,不说了.如果是欧拉图,输出路经. 方法:dfs遍 ...
- @OneToMany
实体关系之@OneToMany 博客分类: hibernate & ejb SQL Order.java package com.entity; import java.io.Seriali ...
- ORA-01033: ORACLE initialization or shutdown in progress问题
这是Oracle12c中笔者遇到的一个错误提示:ORA-01033: ORACLE initialization or shutdown in progress 错误的中文意思是:Oracle初始化未 ...
- LeetCode:926. 将字符串翻转到单调递增
暴力法超时:思想:动态规划 public int minFlipsMonoIncrb(String S) { int result = S.length(); for (int i = 0; i &l ...
- Java对象的死亡
在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(即不可能再被任何途径使用的对象). 一,引用计数算法 给 ...
- PYTHON 源码
http://www.wklken.me/index2.html http://blog.csdn.net/dbzhang800/article/details/6683440
- Ubuntu Desktop 常用软件
IDE: eclipse ***: firefox,登陆账号可以同步书签,我用了全球账号. firefox插件:FireGestures(手势), NoSquint(全局缩放),Url to QRco ...