您的位置:首页 > 其它

DFS基础题

2015-05-15 20:20 281 查看

hdu 1241 油田  裸DFS

题意:@代表油田 8个方向上还有@就相连 相当于求图中连通子图的个数
Sample Input
1 1 // n m
*
3 5
*@*@*
**@**
*@*@*
1 8
@@****@*
5 5
****@
*@@*@
*@**@
@@@*@
@@**@
0 0

Sample Output
0
1
2
2

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;

int d[4][2] = {{0,1},{0,-1},{1,0},{-1,0} } ;
char map[110][110] ;

int n , m ;
int sum = 0 ;

void dfs(int x , int y)
{
int fx , fy ;
int i ;
sum++ ;
map[x][y] = '#';
for (i = 0 ; i < 4 ; i++)
{
fx = x + d[i][0] ;
fy = y + d[i][1] ;
if (fx>=0 && fx<n && fy>=0 && fy<m && map[fx][fy] == '.')
{
dfs(fx,fy) ;
}
}
}

int main()
{
// freopen("in.txt","r",stdin) ;

while (scanf("%d %d" , &m , &n) !=EOF)
{
if (n == 0 && m == 0)
break ;
int i , j ;
int bx , by ;
sum = 0 ;

for (i = 0 ; i < n ; i++)
{
for (j = 0 ; j < m ; j++)
{
cin>>map[i][j];
}

}
for (i = 0 ; i < n ; i++)
{
for (j = 0 ; j < m ; j++)
{
if (map[i][j] == '@')
{
bx = i ;
by = j ;
}
}

}

dfs(bx,by) ;

printf("%d\n" , sum) ;

}

return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: