HDOJ 1241 Oil Deposits【最大连通块 dfs】
2015-08-02 19:58
316 查看
HDOJ 1241 Oil Deposits【最大连通块 dfs】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1241输入那里很烦。。。
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int MAXL = 105; // 矩阵最大宽度 char maze[MAXL][MAXL]; // 迷宫 int vis[MAXL][MAXL]; // 访问标记(坐标点所在连通块编号) int n, m; // 迷宫的长和宽 int dirx[8] = {0, 1, 0, -1, 1, 1, -1, -1}; int diry[8] = {1, 0, -1, 0, 1, -1, -1, 1}; // 移动方向 typedef struct point{ int x, y; }P; // 坐标 void Output(){ for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ printf("%c", maze[i][j]); } printf("\n"); } } void Input(){ memset(maze, 0, sizeof(maze)); memset(vis, 0, sizeof(vis)); for(int i = 0; i < n; i++){ scanf("%s", &maze[i]); } //Output(); } void dfs(int x, int y, int cnt){ if(x < 0 || x >= n || y < 0 || y >= m) return; // 越界 返回 if(maze[x][y] == '*' || vis[x][y] != 0) return; // 没有油或已经访问过 返回 vis[x][y] = cnt; for(int i = 0; i < 8; i++){ dfs(x+dirx[i], y+diry[i], cnt); // 遍历邻接点 } } int Sum(){ int cnt = 0; // 连通块的数量 for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(maze[i][j] == '@' && vis[i][j] == 0){ // 有油并且没有标记过 dfs(i, j, ++cnt); } } } return cnt; } int main(){ while(~scanf("%d%d", &n, &m) && n && m){ Input(); printf("%d\n", Sum()); } return 0; }
相关文章推荐
- Win2003利用dfs(分布式文件系统)在负载均衡下的文件同步配置方案
- win2003分布式文件系统(dfs)配置方法[图文详解]
- win2003分布式文件系统及其部署 图文教程
- Hadoop2.6+jdk8的安装部署(1)——使用jar包安装部署【详细】
- Hadoop FS Shell
- DFS使用方法总结
- FastDFS注意事项
- 无忧技术带您预览DFS(分布式文件系统)管理控制台
- C 语言实现迷宫 DFS算法
- 一幅图弄清DFT与DTFT,DFS的关系
- HDFS---Namenode
- HDFS ---- Services startup
- POJ1523 SPF dfs
- poj1731 Orders dfs
- Surrounded Regions
- Binary Tree Zigzag Level Order Traversal,Restore IP Addresses,Word Search,Simplify Path
- ZOJ Problem Set - 1711 解题报告
- ZOJ Problem Set - 2412解题报告
- ZOJ Problem Set - 1457 解题报告
- Letter Combinations of a Phone Number