Problem Type : DFS
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 10
using namespace std;
char mat[MAX][MAX];
int X[4]= {-1,0,0,1};
int Y[4]= {0,-1,1,0};
int color[MAX][MAX],cou1,cou2,color1[MAX][MAX];
void dfs(int i,int j)
{
color[i][j]=1;
cou1++;
int k,vx,vy;
for(k=0;k<4;k++)
{
vx=i+X[k];
vy=j+Y[k];
if(vx>=0 && vx<9 && vy>=0 && vy<9&&(mat[vx][vy]=='O'||mat[vx][vy]=='.'))
{
if(color[vx][vy]==0)
{
dfs(vx,vy);
}
}
}
}
void dfs1(int i,int j)
{
color1[i][j]=1;
cou2++;
int k,vx,vy;
for(k=0;k<4;k++)
{
vx=i+X[k];
vy=j+Y[k];
if(vx>=0 && vx<9 && vy>=0 && vy<9&&((mat[vx][vy]=='.')||(mat[vx][vy]=='X')))
{
if(color1[vx][vy]==0)
{
dfs1(vx,vy);
}
}
}
}
int main()
{
int i,j,n,m,test;
scanf("%d",&test);
getchar();
while(test--)
{
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
scanf(" %c",&mat[i][j]);
}
}
memset(color,0,sizeof(color));
cou1=0;
cou2=0;
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
if(mat[i][j]=='O' && color[i][j]==0)
{
dfs(i,j);
}
}
}
memset(color1,0,sizeof(color1));
memset(color,0,sizeof(color));
cou2=0;
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
if(mat[i][j]=='X' && color1[i][j]==0)
{
dfs1(i,j);
}
}
}
int sum=cou1+cou2;
int common = sum-81;
int black = cou2-common;
int white =cou1-common;
printf("Black %d White %d\n",black,white);
memset(mat,'\0',sizeof(mat));
}
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAX 10
using namespace std;
char mat[MAX][MAX];
int X[4]= {-1,0,0,1};
int Y[4]= {0,-1,1,0};
int color[MAX][MAX],cou1,cou2,color1[MAX][MAX];
void dfs(int i,int j)
{
color[i][j]=1;
cou1++;
int k,vx,vy;
for(k=0;k<4;k++)
{
vx=i+X[k];
vy=j+Y[k];
if(vx>=0 && vx<9 && vy>=0 && vy<9&&(mat[vx][vy]=='O'||mat[vx][vy]=='.'))
{
if(color[vx][vy]==0)
{
dfs(vx,vy);
}
}
}
}
void dfs1(int i,int j)
{
color1[i][j]=1;
cou2++;
int k,vx,vy;
for(k=0;k<4;k++)
{
vx=i+X[k];
vy=j+Y[k];
if(vx>=0 && vx<9 && vy>=0 && vy<9&&((mat[vx][vy]=='.')||(mat[vx][vy]=='X')))
{
if(color1[vx][vy]==0)
{
dfs1(vx,vy);
}
}
}
}
int main()
{
int i,j,n,m,test;
scanf("%d",&test);
getchar();
while(test--)
{
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
scanf(" %c",&mat[i][j]);
}
}
memset(color,0,sizeof(color));
cou1=0;
cou2=0;
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
if(mat[i][j]=='O' && color[i][j]==0)
{
dfs(i,j);
}
}
}
memset(color1,0,sizeof(color1));
memset(color,0,sizeof(color));
cou2=0;
for(i=0; i<9; i++)
{
for(j=0;j<9;j++)
{
if(mat[i][j]=='X' && color1[i][j]==0)
{
dfs1(i,j);
}
}
}
int sum=cou1+cou2;
int common = sum-81;
int black = cou2-common;
int white =cou1-common;
printf("Black %d White %d\n",black,white);
memset(mat,'\0',sizeof(mat));
}
}
No comments:
Post a Comment