深度搜索

走地图的题目是深度搜索里比较容易理解的题目,更深层次的是全排列和七皇后等经典题目,更加难以理解,代码比较抽象。

题目:红与黑

蒜厂有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。

请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

输入格式

第一行是两个整数 WW 和 HH,分别表示 xx 方向和 yy 方向瓷砖的数量。WW 和 HH 都不超过 2020。

在接下来的 HH 行中,每行包括 WW 个字符。每个字符表示一块瓷砖的颜色,规则如下

1)'.':黑色的瓷砖;

2)'#':白色的瓷砖;

3)'@':黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。

输出格式

输出一行,显示你从初始位置出发能到达的瓷砖数(记数时包括初始位置的瓷砖)。

输出时每行末尾的多余空格,不影响答案正确性

样例输入

6 9

....#.

.....#

......

......

......

......

......

@...#

.#..#.

样例输出

45

AC代码

<font size=4 face="微软雅黑">#include <cstdio>
#include <iostream>
using namespace std;
int n,m;
int step=0;//代表到达黑色瓷砖的块数
char maze[30][30];
bool vis[30][30];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//代表上下左右四个方向
//判断数组是否越界
bool in(int x,int y)
{
return 0<=x&&x<n&&0<=y&&y<m;
}
void dfs(int x,int y)
{
step++;
vis[x][y]=true;
for(int i=0;i<4;i++)
{
int tx=x+dir[i][0];//x的变化
int ty=y+dir[i][1];
if(!vis[tx][ty]&&maze[tx][ty]=='.'&&in(tx,ty))
{
dfs(tx,ty);
}
}
}
int main()
{ cin>>m>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>maze[i][j];
}
}
int x,y;
//寻找@的位置
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(maze[i][j]=='@')
{
x=i;
y=j;
}
}
}
dfs(x,y);
cout<<step;
return 0;
}

代码理解

编写代码主要遇到的问题是如何让程序自己进行“行走”,因此我编辑代码

int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

int tx=x+dir[i][0];
int ty=y+dir[i][1];

成为配套程序让程序自己进行“行走”。在“行走”的函数中这连个代码会帮助程序进行计数和行走,计数则需要加一个

step++;

行走在地图上首要考虑的是越界相关的问题,这时候就需要一个判定函数,该函数应该对重复路线,碰壁,范围进行判定,既是

bool in(int x,int y)
{
return 0<=x&&x<n&&0<=y&&y<m;
}

若return不成立则返回false,若成立则返回ture,与该函数进行匹配的程序是

vis[x][y]=true;
if(!vis[tx][ty]&&maze[tx][ty]=='.'&&in(tx,ty));

递归函数可以让程序自己不停的“行走”,直到完成整个运行输出step

#C++初学记录(深度搜索#递归)的更多相关文章

  1. #C++初学记录(算法测试2019/5/5)(深度搜索)

    深度搜索:Oil Deposits GeoSurvComp地质调查公司负责探测地下石油储藏. GeoSurvComp现在在一块矩形区域探测石油,并把这个大区域分成了很多小块.他们通过专业设备,来分析每 ...

  2. 洛谷P1605 迷宫 深度搜索 模板!

    题目背景 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫中移动有上下左右四种方式,每次只能移 ...

  3. F - 蜘蛛牌(深度搜索)

    Problem Description 蜘蛛牌是windows xp操作系统自带的一款纸牌游戏,游戏规则是这样的:只能将牌拖到比她大一的牌上面(A最小,K最大),如果拖动的牌上有按顺序排好的牌时,那么 ...

  4. 题目--oil Deposits(油田) 基础DFS(深度搜索)

    上一次基本了解了下BFS,这次又找了个基本的DFS题目来试试水,DFS举个例子来说就是 一种从树的最左端开始一直搜索到最底端,然后回到原端再搜索另一个位置到最底端,也就是称为深度搜索的DFS--dep ...

  5. rosbag使用--记录深度相机数据

    首先看一下教程: http://wiki.ros.org/openni_launch/Tutorials/BagRecordingPlayback 知道了rosbag如何进行使用记录深度数据 但是按照 ...

  6. 2018ICPC徐州区域赛网络赛B(逆序枚举或者正序深度搜索)

    #include<bits/stdc++.h>using namespace std;int n,m,k,l;int x[1007],y[1007],z[1007];int dp[1007 ...

  7. [LeetCode] Populating Next Right Pointers in Each Node 深度搜索

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  8. [LeetCode] Balanced Binary Tree 深度搜索

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  9. [LeetCode] Convert Sorted List to Binary Search Tree DFS,深度搜索

    Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...

随机推荐

  1. CSS+transform画动态表情

    先给大家看下画完后是什么样子: 代码看这里: html代码: <body> <div class="emoji emoji_like"> <div c ...

  2. 关于windows 7系统下开启休眠功能的方法

    今天笔者新装了一个windows 7操作系统,装完后,点击开始按钮.鼠标放到关机处的左边扩展选项时,没有发现休眠选项. 于是开始上网查询解决方法,并将过程记录如下: 首先简单的介绍一下休眠功能:休眠( ...

  3. vue之介绍

    vue的作者叫尤雨溪,中国人.自认为很牛逼的人物,也是我的崇拜之神. 关于他本人的认知,希望大家读一下这篇关于他的文章,或许你会对语言,技术,产生浓厚的兴趣.https://mp.weixin.qq. ...

  4. ElasticSearch在linux上安装部署(转)

    一.安装准备工作安装参考文档: ELK官网:https://www.elastic.co/ ELK官网文档:https://www.elastic.co/guide/index.html ELK中文手 ...

  5. TFS二次开发08——分支(Branch)和合并(Merge)

    一:创建分支   private static void BranchFile(Workspace workspace, String newFilename) { String branchedFi ...

  6. HDU 5512 - Pagodas - [gcd解决博弈]

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5512 Time Limit: 2000/1000 MS (Java/Others) Mem ...

  7. python数据结构之哈希表

    哈希表(Hash table) 众所周知,HashMap是一个用于存储Key-Value键值对的集合,每一个键值对也叫做Entry.这些个键值对(Entry)分散存储在一个数组当中,这个数组就是Has ...

  8. ionic 下拉选择框中默认显示传入的参数

    开发过程当中遇到一个有趣的问题,如果我在第一个页面需要把 item { "ownerId" : 1 } 传递给第二个页面,并挂在$scope下 $scope.item = $sta ...

  9. threading.Condition()

    threading — Thread-based parallelism — Python 3.7.2 documentation https://docs.python.org/3/library/ ...

  10. svn冲突的解决

    svn文件冲突的解决 冲突后,会产生三个多余的文件. ①文件名.扩展名.mine 这是你的文件,在你更新你的工作副本之前存在于你的工作副本中--也就是说,没有冲突标志.这个文件 除了你的最新修改外没有 ...