笔试题-计算图中黑色瓷砖数(深度优先遍历的使用)
来源:互联网 发布:逆袭网络剧百度云资源 编辑:程序博客网 时间:2024/05/16 19:17
题目:小明站在一间贴满黑白相间瓷砖的房间里,小明站在黑色瓷砖处,小明处于好奇,希望每次只向相邻黑色瓷砖移动,现在小明想知道自己最多可以踩到多少块黑色瓷砖。
输入描述:第一行输入两个整数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);//左边}}}
0 0
- 笔试题-计算图中黑色瓷砖数(深度优先遍历的使用)
- 图的遍历(深度优先遍历)
- 图的深度优先遍历(DFS)
- 图的遍历(深度优先搜索)
- 图的遍历(深度优先搜索)
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 图的深度优先遍历
- 为 MySQL 设置默认字符集(UTF-8)避免产生乱码
- Android 中 ImageView 控件 scaleType 属性
- rhel7.2 优化技巧
- mac上安装docker
- lua 编译
- 笔试题-计算图中黑色瓷砖数(深度优先遍历的使用)
- jquery中的attr和prop区别
- C++编译错误 error:cannot allocate an object of abstract type
- TOMCAT加载多应用webAppRootKey配置
- mysql存储过程实现split功能
- iOS UINavigationController 修改导航条背景
- 如何实现班级平均薪资15k
- freemark知识点
- 理解Go语言Web编程