【dfs】HDU 4155

来源:互联网 发布:淘宝上10块的狗能买吗 编辑:程序博客网 时间:2024/04/30 00:54

dfs。只标记空格

int g[22][22];bool vis[22][22];int d[4][2] = {0,1,0,-1,1,0,-1,0};int n;int sumb,sumw,sum;int tag;void dfs(int x,int y){    int i,j;    for(i=0;i<4;i++){        int xx = x+d[i][0];        int yy = y+d[i][1];        if(xx<1 || yy<1 || xx>n ||yy>n || (vis[xx][yy] && !g[xx][yy]))continue;        if(tag == 0){            if(g[xx][yy]!= 0)tag = g[xx][yy];        }else if(g[xx][yy] && g[xx][yy]!=tag && tag!=-1){            tag = -1;        }        if(!g[xx][yy]){            sum++;            vis[xx][yy] = 1;//空格才要标记            dfs(xx,yy);        }    }}int main(){    int b,w;    while(scanf("%d",&n) && n){        scanf("%d%d",&b,&w);        int i,j;        memset(g,0,sizeof(g));        memset(vis,0,sizeof(vis));        int x,y;        while(b--){            scanf("%d%d",&x,&y);            g[x][y] = 1;        }        while(w--){            scanf("%d%d",&x,&y);            g[x][y] = 2;        }        sumw = sumb = 0;        for(i=1;i<=n;i++){            for(j=1;j<=n;j++){                if(!vis[i][j] && !g[i][j]){                    tag = 0;                    sum = 1;                    vis[i][j] = 1;                    dfs(i,j);                    if(tag == 1)sumb+=sum;                    else if(tag == 2)sumw+=sum;                }            }        }        if(sumw>sumb){            printf("White wins by %d\n",sumw-sumb);        } else if(sumw<sumb){            printf("Black wins by %d\n",sumb-sumw);        } else printf("Draw\n");    }    return 0;}





















原创粉丝点击