您的位置:首页 > 其它

Hdu 1241 - Oil Deposits

2012-11-24 00:27 405 查看
深搜

惭愧啊,这题之前的代码连测试数据都过不了我居然也写上来了,要不是复习搜索,我也不会发现这个bug。

我的博客都是凭良心写的,每一篇代码都能AC!要是你CE了,换一种语言试试看!

 

 

搜索的时候把搜过的点置换成其他符号,避免重复搜索。

由于有上下左右和对角线上相邻的点,所以要搜索八个方向。

 

AC代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

char map[105][105];
int n, m;
int dir[8][2] = { {-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1} } ;

bool inmap(int x,int y) {
if(x<0 || y<0 || x>=m || y>=n) return false;
return true;
}

void dfs(int x, int y) {
int xx, yy, i;
for(i=0; i<8; i++) {
xx = x + dir[i][0];
yy = y + dir[i][1];
if(inmap(xx, yy) && map[xx][yy] == '@') {
map[xx][yy] = '*';
dfs(xx, yy);
}
}
}

int main() {
int i, j, cnt;
while(scanf("%d%d",&m,&n)!=EOF) {
if(!m) break;
getchar();
for(i=0; i<m; i++)
scanf("%s",map[i]);
cnt = 0;
for(i=0; i<m; i++) {
for(j=0; j<n; j++) {
if(map[i][j] == '@') {
dfs(i, j);
cnt++;
}
}
}
printf("%d\n",cnt);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: