【算法】深度优先搜索(DFS)V
2013-10-14 21:55
435 查看
1. DFS求连通分支
2. 问题
2.1 POJ 2386
题目大意:有一个n*m的矩阵表示field,'W'表示水域,'.'表示干地,现在求池塘pond的数量。pond的数量=连通分支的个数。从一个未被访问的点'W'开始,经DFS后遍历了整个水域;再从下一个未被访问点'W'开始……即可求出连通分支个数。
忘记了是m列,将for(j=0;j<m;j++)写成了for(j=0;j<n;j++)。WA了N久,都没发现。
源代码:
2386 | Accepted | 412K | 0MS | C | 788B | 2013-10-14 21:46:13 |
#include "stdio.h" #include "string.h" #define MAX 100 int n,m,visit[MAX][MAX]; char field[MAX][MAX]; int adjacence[8][2]={{-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1}, {-1,-1}, {-1,0}}; void dfs(int x,int y) { int i,newx,newy; visit[x][y]=1; for(i=0;i<8;i++) { newx=x+adjacence[i][0]; newy=y+adjacence[i][1]; if(newx>=0&&newx<n&&newy>=0&&newy<m&&!visit[newx][newy]&&field[newx][newy]=='W') dfs(newx,newy); } } int main() { int i,j,ponds=0; scanf("%d%d",&n,&m); memset(visit,0,sizeof(visit)); for(i=0;i<n;i++) scanf("%s",field[i]); for(i=0;i<n;i++) for(j=0;j<m;j++) if(field[i][j]=='W'&&!visit[i][j]) { dfs(i,j); ponds++; } printf("%d\n",ponds); return 0; }
2.2 POJ 1562
买一送一,POJ 2386的翻版。源代码:
1562 | Accepted | 180K | 0MS | C | 842B | 2013-10-14 22:09:14 |
#include "stdio.h" #include "string.h" #define MAX 100 int n,m,visit[MAX][MAX]; char field[MAX][MAX]; int adjacence[8][2]={{-1,1}, {0,1}, {1,1}, {1,0}, {1,-1}, {0,-1}, {-1,-1}, {-1,0}}; void dfs(int x,int y) { int i,newx,newy; visit[x][y]=1; for(i=0;i<8;i++) { newx=x+adjacence[i][0]; newy=y+adjacence[i][1]; if(newx>=0&&newx<n&&newy>=0&&newy<m&&!visit[newx][newy]&&field[newx][newy]=='@') dfs(newx,newy); } } int main() { int i,j,deposits; while(scanf("%d%d",&n,&m)&&n) { memset(visit,0,sizeof(visit)); deposits=0; for(i=0;i<n;i++) scanf("%s",field[i]); for(i=0;i<n;i++) for(j=0;j<m;j++) if(field[i][j]=='@'&&!visit[i][j]) { dfs(i,j); deposits++; } printf("%d\n",deposits); } return 0; }
相关文章推荐
- 【算法总结系列-6】深度优先搜索-Depth First Search,DFS
- 基础算法(四)---深度优先搜索(DFS)
- 【算法】深度优先搜索(DFS)III
- 【算法】深度优先搜索(DFS)VI
- 算法研究之解决全排列问题:使用深度优先搜索(DFS)
- 【算法】深度优先搜索(DFS)II
- 蓝桥杯 ADV-188 算法提高 排列数(java) 深度优先搜索 DFS
- 深度优先搜索(DFS) 算法
- DFS深度优先搜索 算法基础篇(六)
- 深度优先搜索(DFS) 算法
- 算法导论-第22章-基本的图算法-22.3 深度优先搜索-22.3-7-使用栈来代替递归实现DFS
- 深度优先搜索(DFS)算法
- 小白成长日记(15)--岛屿面积问题(算法设计--dfs深度优先搜索)
- 深度优先搜索(DFS) 算法
- 【算法】深度优先搜索(DFS)III
- 一个简单的DFS(深度优先搜索)算法加剪枝技术的程序演示
- 【算法】深度优先搜索(DFS)I
- 【深度优先搜索(DFS)算法】数据结构之图的深度优先搜索算法DFS初试
- 开开心心学算法--深度优先搜索(DFS)之滑雪问题
- 深度优先搜索(DFS)算法