笔试题-计算图中黑色瓷砖数(深度优先遍历的使用)
题目:小明站在一间贴满黑白相间瓷砖的房间里,小明站在黑色瓷砖处,小明处于好奇,希望每次只向相邻黑色瓷砖移动,现在小明想知道自己最多可以踩到多少块黑色瓷砖。
输入描述:第一行输入两个整数M、N,分别表示房间的长宽,也就是横竖瓷砖的数目
从第二行开始接下来的M行N列输入瓷砖类型,*表示黑色瓷砖,.表示白色瓷砖,@符号表示小明当前所在的黑色瓷砖
当输入的M,N都为0时,结束输入。
代码:
#include <iostream>
#include <vector>
using namespace std;//深度优先搜索合法瓷砖数目的递归核心函数
//param@1 brickArr瓷砖数组,包含每个位置的瓷砖情况,*表示黑色瓷砖,.表示白色瓷砖,@表示起始位置的黑色瓷砖
//param@2 flagArr标记数组,用于记录某个位置是否被访问过
//param@3 startX起始递归处的X坐标
//param@4 startY起始递归处的Y坐标
//param@5 brickCount符合条件的瓷砖数目
void dfsCore(vector<vector<char>> brickArr,vector<vector<int>>& flagArr,int startX,int startY,int& brickCount);int main()
{int M, N;while (cin >> M >> N){if (0==M && 0==N){break; //输入全为0则结束输入和计算}vector<vector<char>> brickArr(M, vector<char>(N,'#')); //瓷砖数组int startX, startY; //起始点的X,Y坐标//以下两个for循环用于输入瓷砖数据for (int i = 0; i < M;++i){for (int j = 0; j < N;++j){cin >> brickArr[i][j];if (brickArr[i][j] == '@') //明确表明的初始位置{startX = i;startY = j;}}}vector<vector<int>> flagArr(M,vector<int>(N,0));//标记数组int blackBrickCount = 0; //符合条件的瓷砖数dfsCore(brickArr,flagArr,startX,startY,blackBrickCount);cout << blackBrickCount << endl;}return 0;
}void dfsCore(vector<vector<char>> brickArr, vector<vector<int>>& flagArr, int startX, int startY, int& brickCount)
{//检查坐标是否合法if (startX >= 0 && startX < brickArr.size() && startY >= 0 && startY < brickArr[0].size()){if (flagArr[startX][startY] != 1) //未被访问过{flagArr[startX][startY] = 1;if (brickArr[startX][startY] == '*' || brickArr[startX][startY] == '@') //如果为黑色瓷砖{++brickCount;}dfsCore(brickArr, flagArr, startX - 1, startY, brickCount); //上边dfsCore(brickArr, flagArr, startX, startY + 1, brickCount); //右边dfsCore(brickArr, flagArr, startX + 1, startY, brickCount); //下边dfsCore(brickArr, flagArr, startX, startY - 1, brickCount); //左边}}
}
笔试题-计算图中黑色瓷砖数(深度优先遍历的使用)相关推荐
- 怎么制作一个笔试题库?会计笔试题库中的题型分析?
目前各个考试都会有对应的笔试题库供大家学习,因为现在笔试题库作为了一种产品,目前我国的笔试考试越来越多了,笔试题库也层出不穷.下面我就来介绍一下笔试题库,我们如何选择一个全面好用的笔试题库.福昕知翼有 ...
- 中软融鑫 java笔试题_中软国际java笔试题
中软国际Java程序员笔试题 Java程序员笔试题 1.谈谈final, finally, finalize的区别. 2.Anonymous Inner Class (匿名内部类) 是否可以exten ...
- 2016阿里实习线上笔试题-附加题1-随机数生成器
随机数生成器 计算机使用的随机数生成器往往是伪随机的,为了达到统计意义上的真随机数,可以需要引入系统 外的变量等作为随机种子(如UNIX系统中熵池).假设有一天出现了上帝的投硬币函数: int G() ...
- 中软融鑫 java笔试题_中软融鑫2014校招java开发工程师笔试题
如果你想要应聘中软融鑫的java开发工程师岗位,小编下面分享的内容就是中软融鑫2014校招所考的试题,感兴趣的朋友赶紧收藏吧! 一.选择题 1.下列表达式正确的()? A.byte b = 128; ...
- 完美世界:笔试题(最小漂流船只数累计,主城之间的最小距离迪杰斯特拉)...
第一题 第一道题要计算的是最小漂流船,已知每艘船最多可以承载2人,但是重量不能超过limit,求最少需要多少船只? 第一行输入的是参与人员的体重数组,第二行输入的是漂流船承载的最大重量.求最小船只数? ...
- 中国航信 java笔试题_中国航信笔试题整理(2020)
下列哪一个不属于正则表达式限定符( ) A. {n,m} B. {n,} C. {n} D. {$} TCP/IP协议层的网络接口层对应OSI的( ) A. 物理层 B. 链路层 C. 网络层 D. ...
- 金证部分笔试题--前中后序、IP地址分类、三次握手、BIO,NIO,AIO等
1.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是? 解题需要知道的知识点:前序中序和后序 (1)先看下面简单的二叉树 A:根节点,B:左子节点,C:右子节点 前序: ...
- 2014阿里巴巴校园招聘笔试题(中南站)
- 100家大公司java笔试题汇总
NHN CHINA公司笔试题 1.在这写代码 Var array1 = [10,20]; Var array2 = [8,5]; Var result = array1.add(array2); Al ...
最新文章
- 刚刚!中国高校毕业生薪酬排名Top100出炉!
- SQLServer 扫盲
- Python入门篇-数据结构堆排序Heap Sort
- php 函数封装上传,PHP(多)文件上传实现和函数封装
- 多中心临床大数据平台建设及深度应用
- 【需求对接】ATR“春雨”博士后联合基金指南
- java hashSet
- 只能选择分卷文件的第一部分_【教程】分卷解压教程
- 用tinypng插件创建gulp task压缩图片
- 使用Java将图片转成Base64编码,并压缩至40k
- Centos 设置开机自动启动脚本
- Ubuntu 404 Not Found [IP: 91.189.95.85 80]解决办法
- 庆祝JavaCard技术领导SmartCard技术超过五年
- CDN引入elementUI语言设置为英语
- 【学习笔记】计算机时代的统计推断(Bradley Efron and Trevor Hastie 著)
- 如何完成一次快速的查询
- 路由器端口映射失败排查方法
- 敏捷开发中的可用性测试
- 制作视频画中画 教你使用剪辑视频的软件同时制作多个视频
- IntelliJ IDEA激活地址License server