Code: Select all
#include<iostream>
#include <stack>
#include<vector>
#include<cstdio>
using namespace std;
vector<unsigned int>czarne[8100];
stack<unsigned int>Q;
int k;
int liczbawejsc =0;
int wyjscielicznik = 1;
string a1,b1;
void in(int wiersze) {
int a,b;
cin >> a1;
int licznik = 1;
for ( int i = 0; i<wiersze-1; i++)
{
cin >> b1;
for ( int n = 0; n<wiersze; n++)
{
if(a1[n]=='b')
{if(a1[n]=='b'&& a1[n+1]=='b')
{
a = licznik;
b = licznik +1 ;
czarne[a].push_back(b);
czarne[b].push_back(a);
// cout << a << " " << b << endl;
}
if(a1[n]=='b' && b1[n]=='b')
{
a = licznik;
b = licznik + wiersze ;
czarne[a].push_back(b);
czarne[b].push_back(a);
// cout << a << " " << b << endl;
}
if(a1[n]=='b' && b1[n+1]=='b')
{
a = licznik;
b = licznik + wiersze +1 ;
czarne[a].push_back(b);
czarne[b].push_back(a);
// cout << a << " " << b << endl;
}
}
licznik ++;
}
a1 = b1;
}
}
void bfs(int wierzcholek)
{
int flagab[100000];
int v,w,k=0,max=0;
int dupa = 0;
for ( int a = 0; a<100000; a++)
{
flagab[a]=0;
}
for ( int u =1; u<=wierzcholek; u++)
{
if(!flagab[u])
{
flagab[u]=1;
Q.push(u);
while(!Q.empty())
{
k++;
v=Q.top();
Q.pop();
for(int i=0;i<czarne[v].size();i++)
{
w=czarne[v][i];
if(
w>((wierzcholek*wierzcholek)-wierzcholek)
)
{
cout << wyjscielicznik << " B" << endl;
dupa ++;
}
if(!flagab[w])
{
Q.push(w);
flagab[w]=1;
}
}
}
}
}
if(dupa==0)
{
cout << wyjscielicznik << " W" << endl;
}
dupa = 0;
wyjscielicznik++;
}
void out()
{
for(int i=0;i<=16;i++){
cout<<endl<<i<<"->";
for(int j=0;j<czarne[i].size();j++)
cout<<czarne[i][j]<<',';
}
}
int main() {
while(cin >> liczbawejsc && liczbawejsc!=0)
{
in(liczbawejsc);
bfs(liczbawejsc);
while(!Q.empty())Q.pop();
for ( int i = 0; i<4100; i++)
{
czarne[i].clear();
}
}
return 0;
}