买房子
来源:互联网 发布:windows 自带工具 u盘 编辑:程序博客网 时间:2024/04/27 13:26
实验任务
Ytaaa最近刚买了一栋房子,欣喜之余,细心的 ytaaa 想要知道房子的占地面积。Ytaaa
的房子是一个位于矩形之内的不规则图形,现有一份 6X9 的地图:
@代表目前 ytaaa 的位置,.代表可以通过的地方,#代表围墙,ytaaa 可以走到的地方
均属于 ytaaa,现在请你帮忙统计,ytaaa 的房子到底有多大。
数据输入
输入第一行包括两个正整数 m(m<=20),n(n<=20),地图大小。接下来 N 行为 ytaaa 提供的地图。
数据输出
输出仅有一个数,ytaaa 的住宅面积。
输入示例
输出示例
45
解题思路
简单的DFS应用。
注意要把那些 虽然是“.”但是进不去的地方 也标记成“#”。
参考代码
#include <stdio.h> #include <string.h> const int maxn = 25; char map[maxn][maxn]; //存储地图 bool pos[maxn][maxn]; //标记是否搜索过int dir[9][2] = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,0},{0,1},{1,-1},{1,0},{1,1}}; //搜索的9个方向 (其中{0,0}可有可无) int p_x = 0,p_y = 0; //记录起始位置 int ans,m,n; void InputMap(); void Check(); void DFS(int x,int y); int main() { int i,j; while (~scanf("%d%d",&m,&n)){ getchar(); memset(pos,true,sizeof(pos)); memset(map,'#',sizeof(map)); //初始化 InputMap(); //读入地图 Check(); //检查哪些是不能进入的“.” ans = 0; DFS(p_x,p_y);//从起始位置开始DFS printf("%d\n",ans); } return 0; } void InputMap() { int i,j; for (i = 1;i <= n;i++){ for (j = 1;j <= m;j++){ scanf("%c",&map[i][j]); if (map[i][j] == '@') p_x = i,p_y = j; } getchar(); } } void Check() { int i,j; for (i = 1;i <= n;i++) for (j = 1;j <= m;j++) if (map[i-1][j] == '#' && map[i+1][j] == '#' &&map[i][j-1] == '#' &&map[i][j+1] == '#') //如果上、下、左、右都是'#'的话,中间这个肯定是不能进入的,同样标记成'#' map[i][j] = '#'; } void DFS(int x,int y) { pos[x][y] = false; //搜索过的做好标记 ans ++; int i; for (i = 0;i < 9;i++){ int dx = x+dir[i][0],dy = y+dir[i][1]; if (map[dx][dy] == '.' && pos[dx][dy]) DFS(dx,dy); } }
0 0
- 买房子
- 买房子
- 买房子
- 买房子
- 买房子
- 买房子
- 买房子
- 什么时候买房子?
- 买房子的烦恼
- 买房子的折磨
- 买房子的故事
- POJ-4022:买房子
- 兔子买房子
- 题目1158:买房子
- 题目1158:买房子
- 北大-买房子
- 题目1158:买房子
- 题目1158:买房子
- OC中面向对象语法类与对象
- ddpush 学习之路 2 DateTimeUtil.java
- MySQL服务器连接过程分析
- 同步与异步
- C++标准转换运算符const_cast
- 买房子
- NYOJ 27 水池数目 【简单搜索】
- 第一章第四题
- 做题常见坑记录贴
- 同步与异步(二)
- 程序设计竞赛——知识点_1
- C++ 友元和继承
- 使用D3制作图表(二)
- [Raytracing]光线追踪算法