POJ1979 红与黑 DFS
来源:互联网 发布:四川大学网络教育作业 编辑:程序博客网 时间:2024/04/29 05:43
这道题是我学了dfs之后用来强化这个思想的。就连我的水平也觉得这道题很水。
问题描述:
就像是小时候玩的吃豆子的游戏,上下左右走,然后统计一共能吃到多少个豆子。
算法思想:
其实跟POJ2386差不多,甚至更简单一些,因为这个题基本就是不需要遍历图,只是在起始点周围的四个地方开始运行DFS即可了。
能够正常AC,不知道有没有更快捷简便的方法。
那么需要做的就是记下来出发点,然后检测周围四个地方能不能走,如果能走的话就开始DFS函数,DFS函数中用递归做同样的事情。
代码部分:
#include <iostream>#include <string>using namespace std;char field[22][22];int n, m;int result = 1;int x, y;void dfs(int a, int b) {field[a][b] = '#';result++;if (a - 1 > 0 && field[a - 1][b] == '.') {dfs(a - 1, b);}if (a + 1 <= n && field[a + 1][b] == '.') {dfs(a + 1, b);}if (b - 1 > 0 && field[a][b - 1] == '.') {dfs(a, b - 1);}if (b + 1 <= m && field[a][b + 1] == '.') {dfs(a, b + 1);}}int main() {while (cin >> m >> n) {if (n == 0 && m == 0) break;for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {char s;cin >> s;if (s == '@') {x = i; y = j;}field[i][j] = s;}}field[x][y] = '#';if (x-1 > 0 && field[x - 1][y] == '.') {dfs(x - 1, y);}if (x + 1 <= n && field[x + 1][y] == '.') {dfs(x + 1, y);}if (y - 1 > 0 && field[x][y - 1] == '.') {dfs(x, y - 1);}if (y + 1 <= m && field[x][y + 1] == '.') {dfs(x, y + 1);}cout << result << endl;result = 1;}return 0;}
这道题还是挺简单的,适合练DFS的前几道题吧。
0 0
- POJ1979 红与黑 DFS
- 红与黑-dfs
- HNCU1103:红与黑(BFS&DFS)
- dfs入门——红与黑
- 红与黑(dfs水题)
- 【基础练习】【DFS】codevs2806 红与黑题解
- 菜鸟DFS的第一次尝试:1103:红与黑
- 红黑瓷砖--dfs求解
- 红与黑
- bfs红与黑
- 递归~红与黑
- 长城汽车红与黑
- 红与黑
- codevs2806红与黑
- 递归--红与黑
- 红与黑
- POJ2816红与黑
- 红与黑
- Abode Flash Builder提高编程效率的若干方法
- Linux编辑器vi使用方法详细介绍
- 计算从1-1/2+1/3-1/4+1/5-1/6+...-1/100=???
- 50条最频繁使用的 UNIX/LINUX命令(带例子)
- (转)什么才是程序员的核心竞争力?
- POJ1979 红与黑 DFS
- 想成功,每天做一点折磨你的事——读书笔记(三)
- IMP-00010:不是有效的导出文件,头部验证失败
- 改善mysqli中使用DELETE的小bug
- 大数据的学习方向
- Minimum Depth of Binary Tree
- HUST 1017 Exact cover(DLX精确覆盖)
- iOS8 Core Location
- myeclipse部署时出现could not be redeployed because ……错误