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
原创粉丝点击