dfs 先找出死亡的人所在海域 然后 从外侧把不属于这个海域的部分去掉 然后就开始dfs 寻找 有几个岛屿  以后还要好好努力

做题 太死板

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>

bool vis[510][510];
int map[510][510];
int n,m,x,y;
int move1[4][2]= {{0,1},{0,-1},{1,0},{-1,0}};
int move2[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
void dfsb(int a, int b)
{
    if(map[a][b]==1) return ;
    if(map[a][b]==2) return ;
    if(map[a][b]==0) return ;
    if(map[a][b]==3) map[a][b]=1;
    for(int i=0; i<8; i++)
    {
        int nx=a+move2[i][0];
        int ny=b+move2[i][1];
        dfsb(nx,ny);
    }
}
void dfsn(int a, int b)
{
    if(map[a][b]==1) return ;
    if(!map[a][b]) return;
    map[a][b]=0;
    for(int i=0; i<4; i++)
    {
        int nx=move1[i][0]+a;
        int ny=move2[i][1]+b;
        dfsn(nx, ny);
    }
}
void dfs(int a, int b)
{
    if(map[a][b]==1) return;
    if(map[a][b]==0) return;
    if(map[a][b]==3) return;
    map[a][b]=1;
    for(int i=0; i<4; i++)
    {
        int nx=move1[i][0]+a;
        int ny=move2[i][1]+b;
        dfs(nx, ny);
    }
}
int main()
{
   // freopen("s.txt","r",stdin);
    while(scanf("%d %d %d %d",&m,&n,&y,&x)==4)
    {
        char ch;
        memset(map, 0, sizeof(map));
        getchar();
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                scanf("%c",&ch);
                if(ch=='#')
                    map[i][j]=2;
                else if(ch=='.')
                    map[i][j]=3;
            }
            getchar();
        }
        dfsb(x,y);
        for(int i=1; i<=n; i++)
            dfsn(i,1),dfsn(i,m);
        for(int i=1; i<=m; i++)
            dfsn(1,i),dfsn(n,i);
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if(map[i][j]==2)
                {
                    ans++;
                    dfs(i,j);
                }
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}
View Code

 

posted on 2013-08-06 16:44  风流monkey  阅读(95)  评论(0)    收藏  举报