852 - Deciding victory in Go

#include<bits/stdc++.h>
using namespace std;

char board[12][12];
int black_color[12][12];
int white_color[12][12];
int white_stone,black_stone;

void dfs(int i,int j)
{
    if(i<0||j<0||i>=9||j>=9)
    {
        return;
    }
    if(board[i][j]=='O'||black_color[i][j]==1)
    {
        return;
    }
    if(board[i][j]=='X' && black_color[i][j]==0)
    {
        black_stone++;
        black_color[i][j]=1;
    }
    else if(board[i][j]=='.')
    {
        black_color[i][j]=1;
    }
    black_color[i][j]=1;
    dfs(i,j+1);
    dfs(i,j-1);
    dfs(i+1,j);
    dfs(i-1,j);
}

void dfs1(int i,int j)
{
    if(i<0||j<0||i>=9||j>=9)
    {
        return;
    }
    if(board[i][j]=='X' || white_color[i][j]==1)
    {
        return;
    }
    if(board[i][j]=='O' && white_color[i][j]==0)
    {
        white_stone++;
        white_color[i][j]=1;
    }
    else if(board[i][j]=='.')
    {
        white_color[i][j]=1;
    }
    white_color[i][j]=1;
    dfs1(i,j+1);
    dfs1(i,j-1);
    dfs1(i+1,j);
    dfs1(i-1,j);
}

int main()
{
    int number,i,j,white_territory,black_territory;
    scanf("%d",&number);
    getchar();
    while(number--)
    {
        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                scanf("%c",&board[i][j]);
            }
            getchar();
        }

        white_territory=0;
        black_territory=0;
        black_stone=0;
        white_stone=0;

        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                if(board[i][j]=='X' && black_color[i][j]==0)
                {
                    dfs(i,j);
                }
            }
        }

        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                if(board[i][j]=='O' && white_color[i][j]==0)
                {
                    dfs1(i,j);
                }
            }
        }

        for(i=0;i<9;i++)
        {
            for(j=0;j<9;j++)
            {
                if(board[i][j]=='.' && (black_color[i][j]==1 && white_color[i][j]==1))
                {
                    continue;
                }
                if(board[i][j]=='.' && white_color[i][j]==1)
                {
                    white_territory++;
                }
                else if(board[i][j]=='.' && black_color[i][j]==1)
                {
                    black_territory++;
                }
            }
        }

        black_stone+=black_territory;
        white_stone+=white_territory;

        printf("Black %d White %d\n",black_stone,white_stone);

        memset(black_color,0,sizeof(black_color));
        memset(white_color,0,sizeof(white_color));

    }
    return 0;
}

0 comments: (+add yours?)