Oil Deposits(HD_1241)BFS
来源:互联网 发布:c语言代码表白 编辑:程序博客网 时间:2024/05/16 11:16
题目描述:见杭电OJ http://acm.hdu.edu.cn/showproblem.php?pid=1241
题目思路:题目大意为求油田的连通分量,可以用两个for循环遍历整个图,当遇到为油田时,分量数加一,并且使用DFS将相连的油田标记为已走过,最后输出分量总数。
代码如下:
#include"stdio.h"
#include"string.h"
#include"iostream"
using namespace std;
int map[105][105];
int n,m;
int count=0; //记油井数
void DFS(int i,int j)
{
map[i][j]=0;
//向上走
if(i-1>=1&&map[i-1][j]==1)
DFS(i-1,j);
//向下走
if(i+1<=n&&map[i+1][j]==1)
DFS(i+1,j);
//向左走
if(j-1>=1&&map[i][j-1]==1)
DFS(i,j-1);
//向右走
if(j+1<=m&&map[i][j+1]==1)
DFS(i,j+1);
//向左上走
if(i-1>=1&&j-1>=1&&map[i-1][j-1]==1)
DFS(i-1,j-1);
//向右上走
if(i-1>=1&&j+1<=m&&map[i-1][j+1]==1)
DFS(i-1,j+1);
//向左下走
if(i+1<=n&&j-1>=1&&map[i+1][j-1]==1)
DFS(i+1,j-1);
//向右下走
if(i+1<=n&&j+1<=m&&map[i+1][j+1]==1)
DFS(i+1,j+1);
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
count=0;
//存图
char ch;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>ch;
if(ch=='*')
map[i][j]=0;
else
map[i][j]=1;
}
//遍历图
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(map[i][j]==1)
{
count++;
DFS(i,j);
}
}
printf("%d\n",count);
}
return 0;
}
- Oil Deposits(HD_1241)BFS
- UVA Oil Deposits (BFS)
- UVA 572 Oil Deposits (简单BFS)
- HDU-#1241 Oil Deposits(BFS & DFS)
- POJ 1562-Oil Deposits(BFS)
- UVA-572 Oil Deposits(BFS)
- uva 572 Oil Deposits(bfs实现)
- HDU-1241-Oil Deposits(BFS)
- hd 1241 Oil Deposits (dfs || bfs)
- HDU1241 Oil Deposits(dfs or bfs)
- Oil Deposits(BFS模板题)
- HDU 1241:Oil Deposits(BFS)
- 【hdu 1241】 Oil Deposits (dfs+bfs)
- Oil Deposits(bfs)
- Oil Deposits BFS+DFS
- poj1562 Oil Deposits BFS
- Oil Deposits(dfs/bfs)
- BFS-Oil Deposits
- #if 0 ... #endif的真实用途
- svn常用命令
- SIM800H NTP网络授时
- Kafka设计解析(四)- Kafka Consumer设计解析
- 17个提升iOS开发效率的必用工具
- Oil Deposits(HD_1241)BFS
- AndroidNDK开发(八)应用监听自身卸载 弹出用户反馈调查
- Android手机Home键/Back回退键事件
- Servlet入门实践
- 【Leetcode】Add Two Numbers
- LinkedList和ArrayList的区别
- 这样解释空白期,面试才有戏!
- 去除ArrayList中的重复元素
- iOS 快速集成ShareSDK实现分享功能