POJ2386 Lake Counting 图遍历/DFS
来源:互联网 发布:手机下载监控软件 编辑:程序博客网 时间:2024/05/02 00:16
大概是这道题让我走入了DFS的大门吧。用了图形的遍历加上DFS的思想。
问题描述:
题目是给你一个N*M大小的水池,然后其中分为W和 . 两个字符,W代表了水,那么我们要算的就是八连通的水的个数。
算法思想:
在最外层做一个N*M的循环,把整个图用最naive的方法遍历一遍,检查是不是有W的地方。
在每一个W的地方开始运行dfs这个函数,这个函数的作用是
首先将该点设为 . ,也就是记下来我们已经到过这个地方,并且在之后用递归遍历其周围八个点
在这八个点中,如果出现W,那么以此点为起点再进行dfs。
然后在最外部dfs执行一次便把结果加一,那么最后便得到了我的结果。
代码部分:
#include <iostream>using namespace std;char field[117][117];int n, m;void dfs(int x, int y) {field[x][y] = '.';field[x][y] = 1;for (int i = -1; i <= 1; ++i) {for (int j = -1; j <= 1; ++j) {if (x + i > 0 && x + i <= n && y + j > 0 && y + j <= m && field[x + i][y + j] == 'W') {dfs(x + i, y + j);}}}}int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {char s;cin >> s;field[i][j] = s;}}int res = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++) {if (field[i][j] == 'W') {dfs(i, j);res++;}}}cout << res << endl;return 0;}
最后交的时候发现了很多用的内存和时间比我成倍缩小的,感觉还是too naive。多年以后回头看这篇文章,应该会有多一点感悟吧。
0 0
- POJ2386 Lake Counting 图遍历/DFS
- POJ2386 Lake Counting 图DFS
- POJ2386:Lake Counting(DFS)
- poj2386 Lake Counting DFS
- POJ2386 Lake Counting(DFS)
- POJ2386 Lake Counting 【DFS】
- POJ2386 Lake Counting (dfs)
- POJ2386 Lake Counting(dfs)
- poj2386 Lake Counting【DFS】
- POJ2386 Lake Counting (DFS)
- POJ2386 Lake Counting 图的遍历
- POJ2386:Lake Counting(dfs)
- POJ2386 Lake Counting简单dfs
- poj2386 Lake Counting(简单DFS)
- POJ2386 Lake Counting BFS判断图连通
- POJ2386 Lake Counting
- poj2386 Lake Counting
- poj2386 Lake Counting
- nginx与php的WEB常见问题排查
- 关于Cookie的学习
- 中谷教育Python05笔记——数据类型、数字、字符串
- 房地产大鳄的手段不是我们摸索的到的
- MYSQL注入绕过技巧
- POJ2386 Lake Counting 图遍历/DFS
- ListView终极优化方法,绝对流畅
- Ext中获取combobox中的valueField和displayField的值
- Android Studio Share Project On Github
- Quick cocos2dx-Lua(V3.3R1)学习笔记(8) ---- 事件篇之单点触摸事件,让我们用精灵模仿一个按钮吧
- linux 安装Tomcat
- sizeof与strlen函数的区别
- uva 10194 Football (aka Soccer)
- C#基础知识之四