int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 }; void dfs()//参数用来表示状态
{
if (到达终点状态)
{
...//根据题意来添加
return;
}
if (越界或者是不符合法状态)
return;
for (扩展方式)//一般是四个方向扩展
{
if (扩展方式所达到状态合法)
{
....//根据题意来添加
标记;
dfs();
修改(剪枝);
(还原标记);
//是否还原标记根据题意
//如果加上(还原标记)就是 回溯法
} }
}

  

洛谷P1605 迷宫:DFS

题目描述

迷宫 【问题描述】

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点坐标和终点坐标,

问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案。在迷宫

中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。

【数据规模】

1≤N,M≤5

输入输出格式

输入格式:

第一行N、M和T,N为行,M为列,T为障碍总数。第二行起点坐标SX,SY,终点

坐标FX,FY。接下来T行,每行为障碍点的坐标。

输出格式:

给定起点坐标和终点坐标,问每个方格最多经过1次,从起点坐标到终点坐标的方

案总数。

输入输出样例

输入样例#1:

2 2 1
1 1 2 2
1 2
输出样例#1:

1
#include<iostream>
#include<algorithm>
using namespace std; int a[8][8];//a数组记录地图障碍物
int book[8][8];//book数组标记走没走过,没走过的为0
int n, m,x,y, t, sx, sy, fx, fy,cnt=0;//cnt代表方案书
int dx[] = { 0,1,0,-1 };
int dy[] = { 1,0,-1,0 }; bool check(int x, int y) {
return (a[x][y] != 1)&&(book[x][y]==0)&&x>0&&y>0&&x<=n&&y<=m;
} void dfs(int x,int y) {
if (x == fx&&y == fy) {
cnt++;
return;
}
for (int i = 0; i < 4; i++) {
int nx =x+ dx[i];
int ny =y+ dy[i];
if (check(nx, ny)) {
book[nx][ny] = 1;
dfs(nx, ny);
book[nx][ny] = 0;
}
}
return;
}
int main() {
cin >> n >> m >> t >> sx >> sy >> fx >> fy;
for (int i = 0; i < t; i++) {
cin >> x >> y;
a[x][y] = 1;
} book[sx][sy] = 1;//先把起点标记走过
dfs(sx, sy);
cout << cnt << "\n";
return 0;
}
//输入:
//00000
//11110
//00010
//00000
//00000
//输出:
//10

  

【模板】DFS的更多相关文章

  1. [模板] dfs序, 树链剖分, 换根

    树链剖分 树链剖分是一种对树的分治, 可以把树上的任意一条链分解为 \(O(\log n)\) 条在dfs序上相邻的子链, 便于数据结构(如线段树)来维护. 另外, 子树在dfs序上也是一个连续的区间 ...

  2. 51nod1832(二叉树/高精度模板+dfs)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1832 题意: 中文题诶~ 思路: 若二叉树中有 k 个节点只 ...

  3. [模板] dfs序

    B.树之呼吸-贰之型-dfs序 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 42 (16 users) Total Accepted ...

  4. hdu1536&&hdu3023 SG函数模板及其运用

    S-Nim Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status ...

  5. DFS常规解题套路

    本文为xdfApp团队成员文章,原文链接:https://blog.csdn.net/sinat_37380158/article/details/106866970 作者介绍:韩沛沛, 北京邮电大学 ...

  6. 94.Binary Tree Inorder Traversal---二叉树中序非递归遍历

    题目链接 题目大意:中序遍历二叉树.先序见144,后序见145. 法一:DFS,没啥说的,就是模板DFS.代码如下(耗时1ms): public List<Integer> inorder ...

  7. CF36 E Two Paths——欧拉(回)路

    题目:http://codeforces.com/contest/36/problem/E 给定一张无向图,要求输出两条欧拉路覆盖所有边: 分类讨论,首先判-1:有两个以上连通块 / 有四个以上奇度数 ...

  8. Traffic Network in Numazu

    Traffic Network in Numazu 题目描述 Chika is elected mayor of Numazu. She needs to manage the traffic in ...

  9. 用java以正确的姿势刷CSP

    许多程序算法考试中,用java是个不错的选择,它几乎实现了所有c++能实现的,所以越来越受Acmer的欢迎.总结一下用到的一些技巧和方法.更多关于csp的可参考海岛blog|皮卡丘 1. 输出 规格化 ...

  10. leetcode之二叉树

    专题:二叉树遍历 987. 二叉树的垂序遍历 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历 序列. 对位于 (row, col) 的每个结点而言,其左右子结点分别位于 (row ...

随机推荐

  1. XML解析方式

    两种解析方式概述 dom解析 (1)是W3C组织推荐的处理XML的一种解析方式. (2)将整个XML文档使用类似树的结构保存在内存中,在对其进行操作. (3)可以方便的对XML进行增删改查的操作 (4 ...

  2. JS中的Symbol数据类型

    最初JS的6种数据类型: null,undefined,boolean,number,string,object 注意:实际上,array和function都是属于object的子类 ES6中,新增了 ...

  3. Hive(3)-meta store和hdfs详解,以及JDBC连接Hive

    一. Meta Store 使用mysql客户端登录hadoop100的mysql,可以看到库中多了一个metastore 现在尤其要关注这三个表 DBS表,存储的是Hive的数据库 TBLS表,存储 ...

  4. 3.1 wifi网卡RT3070在S3C2440的移植和使用

    学习目标:熟悉RT3070在S3C2440的移植和使用,以及其中的相关工具的安装和使用: 一.配置内核选择WIFI驱动 1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看w ...

  5. Python学习 :常用模块(一)

    常用模块(一) 一.时间(time)模块 时间戳 (Timestamp):时间戳表示的是从1970年1月1日00:00:00为计时起点,到当前的时间长度 import time print(help( ...

  6. ruby配置镜像源

    1.打开电脑的cmd窗口,输入如下命令即可查看gem镜像: gem sources l 或是直接使用 gem sources 查询结果如下: C:\Users\Administrator>gem ...

  7. C# base64 转 byte[]

    string转成 Base64 形式的String //byte[] 转string byte[] b = Encoding.Default.GetBytes("字符串"); // ...

  8. cocos2d中锚点概念

    这两天看了下锚点的概念. /** * Sets the anchor point in percent. * * anchorPoint is the point around which all t ...

  9. Go语言中的变量

    1 概述 变量(Variable)是程序运行过程中,内容可以变化(修改)的量,变量的功能是存储用户的数据,是计算机语言中能储存计算结果或能表示值抽象概念.变量,是通过变量的标识符定位值的过程.变量的内 ...

  10. day 2 飞机大战原理

    1. 程序的图片的坐标 (左上角为顶点) 2.图片变成动态的 3.集成显卡 和独立显卡