统计被白棋包围的格子数与被黑棋包围的格子数:dfs()
#include<stdio.h>
#include<iostream>
using namespace std;
int fin,n,b,w,r,c,flag,sum;
int map[20][20];
int vis[20][20];
int dirx[4]={0,1,0,-1};
int diry[4]={1,0,-1,0};
void dfs(int x,int y)
{
vis[x][y]=1;
for(int i=0;i<4;i++)
{
int lx= x+dirx[i];
int ly= y+diry[i];
if(1<=lx&&lx<=n&&1<=ly&&ly<=n)
{
if(map[lx][ly])
{
if(flag==0) flag=map[lx][ly];
else if(flag!=map[lx][ly]) fin=0;
}
else if(map[lx][ly]==0&&!vis[lx][ly])
{
sum++;
dfs(lx,ly);
}
}
}
}
int main()
{
while(scanf("%d",&n)&&n)
{
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
int black=0,white=0;
scanf("%d%d",&b,&w);
for(int i=0;i<b;i++)
{
scanf("%d%d",&r,&c);
map[r][c] = 1;
}
for(int i=0;i<w;i++)
{
scanf("%d%d",&r,&c);
map[r][c] = 2;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(map[i][j]==0&&vis[i][j]==0)
{
fin=1;
flag=sum=0;
dfs(i,j);
if(fin==1&&flag==1) black+=sum+1;
else if(fin==1) white+=sum+1;
}
}
if(black>white) printf("Black wins by %d\n",black-white);
else if(black<white) printf("White wins by %d\n",white-black);
else printf("Draw\n");
}
}
hdu 4158 GO
最新推荐文章于 2015-02-14 22:17:46 发布