您的位置:首页 > 其它

Hdu_1241 Oil Deposits

2014-01-29 22:47 399 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241

/*
遍历所有点,找到未被标记的‘@’,num++,标记该节点,对该点进行dfs,
找到相邻的'@',标记该节点,再次进入dfs,
直到各个方向都不存在相邻未被标记的'@'后退出,继续进行遍历
*/

#include<iostream>
using namespace std;

int m,n;
char grid[101][101];
int visited[101][101];
int dir[8][2]={{1,0},{1,1},{1,-1},{-1,0},{0,1},{0,-1},{-1,-1},{-1,1}};
int num;                 //num为deposit的数量
int fr,fc;

void dfs(int r,int c){

for(int i=0;i<8;i++)
{
fr=r+dir[i][0];
fc=c+dir[i][1];
if(fr>=m||fr<0)
continue;
if(fc>=n||fc<0)
continue;
if(grid[fr][fc]=='*')
continue;
if(visited[fr][fc])
continue;
visited[fr][fc]=1;
dfs(fr,fc);
}

}

int main (){

while(cin>>m>>n)
{
if(!m)
break;

for(int i=0;i<m;i++)
cin>>grid[i];

num=0;
memset(visited,0,sizeof(visited));

for(int i=0;i<m;i++)
{
for(int j=0;grid[i][j]!='\0';j++)
{
if(grid[i][j]=='*')
continue;
if(visited[i][j])
continue;
num++;
visited[i][j]=1;
dfs(i,j);
}
}
cout<<num<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: