度度熊的01世界
Accepts: 627
Submissions: 2714
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <map>
#define ms(x,y) memset(x,y,sizeof(x))
using namespace std;
typedef long long ll;
const int maxn = 1e9 + 2;
const double pi = acos(-1.0);
const int dx[] = { 0,1,0,-1 }, dy[] = { 1,0,-1,0 };
struct node {
int x, y;
node(int p, int q)
{
x = p;
y = q;
}
};
int n, m;
char a[110][110] = { 0 };
bool book[110][110] = { 0 };
int bfs(int x, int y, char c)
{
int bao = 1;
queue<node> que;
que.push(node(x, y));
book[x][y] = 1;
while (que.size())
{
node p = que.front(); que.pop();
for (int i = 0; i < 4; i++)
{
int px, py;
px = p.x + dx[i];
py = p.y + dy[i];
if (px >= 0 && px < n&&py >= 0 && py < m)
{
if (!book[px][py] && a[px][py] == c)
{
book[px][py] = 1;
que.push(node(px, py));
}
}
else
{
bao = 0;
}
}
}
return bao;
}
int main()
{
while (~scanf("%d%d", &n, &m))
{
ms(book, 0);
ms(a, 0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
scanf(" %c", &a[i][j]);
}
}
int num0 = 0, num1 = 0;
int bao1 = 0, bao0 = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (!book[i][j])
{
if (a[i][j] == '0')
{
num0++;
bao1 += bfs(i, j, '0');
}
else
{
num1++;
bao0 += bfs(i, j, '1');
}
}
}
}
//printf("num0:%d num1:%d bao0:%d bao1:%d
", num0, num1, bao0, bao1);
if (num1 == 1 && bao1 == 0)
{
printf("1
");
}
else if (num1 == 1 && bao1 == 1)
{
printf("0
");
}
else printf("-1
");
}
}