博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PoJ1979 Red and Black (DFS)
阅读量:5164 次
发布时间:2019-06-13

本文共 1409 字,大约阅读时间需要 4 分钟。

题目链接:

题意:

  有一个由正方形的黑色砖块和红色砖块组成的矩形广场,一个人站在广场上的某处,他可以选择往四周(上下左右)的黑色砖块上走,问他一共可以走多少个砖块(加上他本身站立的砖块).

  "."为黑色砖块

  "#"为红色砖块

  "@"为人的起始位置

思路:

  利用DFS 从人的起始位置开始搜索,搜索的过程中直接统计砖块的数量就好。

代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 11 typedef long long LL;12 using namespace std;13 const double PI = acos(-1);14 const int MAXN = 20;15 int visit[MAXN + 3][MAXN + 3];//标记数组16 char map[MAXN + 3][MAXN + 3];17 int stepX[] = {-1, 0, 0, 1};18 int stepY[] = { 0, -1, 1, 0};19 int cnt;20 21 void DFS(int x, int y) {22 visit[x][y] = 1;23 for(int i = 0; i < 4; i++) {24 int tx = x + stepX[i], ty = y + stepY[i];25 if(tx >=0 && ty >= 0 && !visit[tx][ty] && map[tx][ty] == '.'){26 cnt++; //计数27 visit[tx][ty] = 1;28 DFS(tx, ty);29 }30 }31 }32 33 int main() {34 //freopen("input", "r", stdin);35 int m = -1, h = -1;36 while(scanf("%d%d", &m, &h), m || h) {37 memset(visit, 0, sizeof(visit));38 memset(map, 0, sizeof(map));39 for(int i = 0; i < h; i++) scanf("%s", map[i]);40 int stX = -1, stY = -1; //起始坐标41 for(int i = 0; i < h; i++) {42 for(int j = 0; j < m; j++) {43 if(map[i][j]== '@') stX = i, stY = j; 44 }45 }46 cnt = 1;47 DFS(stX, stY);//从起始坐标开始搜索48 printf("%d\n", cnt);49 }50 return 0;51 }

 

转载于:https://www.cnblogs.com/Ash-ly/p/5710597.html

你可能感兴趣的文章
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
有关快速幂取模
查看>>
Linux运维必备工具
查看>>
字符串的查找删除
查看>>
NOI2018垫底记
查看>>
快速切题 poj 1002 487-3279 按规则处理 模拟 难度:0
查看>>
Codeforces Round #277 (Div. 2)
查看>>