您的位置:首页 > 其它

poj2386----简单dfs,a一送一

2013-01-02 23:24 357 查看
/*poj2386 求有几个水坑*/
#include<stdio.h>
#include<iostream>
char ans[110][110];
int n, m;
int cnt;
int dx[10] = {-1, 0, 1, -1, 1, -1, 0, 1};
int dy[10] = {1, 1, 1, 0, 0, -1, -1, -1};
void dfs(int x, int y)
{
ans[x][y] = '.';
for(int i=0; i<8; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx>=0 && tx<n && ty>=0 && ty<m && ans[tx][ty]=='W')
{
dfs(tx, ty);
}
}
}
void fun()
{
cnt = 0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(ans[i][j] == 'W')
{
cnt++;
dfs(i, j);
}
}
}
printf("%d\n", cnt);
}
int main()
{
while(scanf("%d %d", &n, &m) != EOF)
{
getchar();
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
scanf("%c", &ans[i][j]);
}
getchar();
}
fun();
}
return 0;
}


a一送一:poj3620

/*poj3620 求最大的水坑*/
#include<iostream>
#include<stdio.h>

int n, m, k;
int ans[110][110];
int dx[5] = {0, 1, 0, -1};
int dy[5] = {1, 0, -1, 0};
int tmp;

void dfs(int x, int y)
{
ans[x][y] = 0; tmp++;
for(int i=0; i<4; i++)
{
int tx = x + dx[i];
int ty = y + dy[i];
if(tx>=0 && tx<n && ty>=0 && ty<m && ans[tx][ty])
{
dfs(tx, ty) ;
}
}
}
void fun()
{
int cnt = 0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
tmp=0;
if(ans[i][j])
{
dfs(i, j);
if(tmp > cnt)
cnt = tmp;
}
}
}
printf("%d\n", cnt);
}
int main()
{
int a, b;
while(scanf("%d %d %d", &n, &m, &k) != EOF)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
ans[i][j] = 0;
}
}
for(int i=0; i<k; i++)
{
scanf("%d %d", &a, &b);
ans[a-1][b-1] = 1;
}
fun();
}
return 0;
}


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