📄 pku1164.cpp
字号:
/*
Author:Sempr
Algorithm:DFS
Date:2006-05-06
*/
#include <stdio.h>
#include <string.h>
#define size 51
int map[size][size];
int visited[size][size];
int M, N;
int D[4][2] = {0, -1, -1, 0, 0, 1, 1, 0};
int cnt, max, id;
int In(int x, int y)
{
return x >= 0 && y >= 0 && x < M && y < N;
}
void DFS(int x, int y)
{
int i, nx, ny;
visited[x][y] = id;
cnt++;
for (i = 0; i < 4; i++)
{
if (map[x][y] & (1 << i))
{
continue;
}
nx = x + D[i][0];
ny = y + D[i][1];
if (In(nx, ny) && !visited[nx][ny])
{
DFS(nx, ny);
}
}
}
void Solve()
{
int i, j;
memset(visited, 0, sizeof(visited));
for (i = 0, id = 0, max = 1; i < M; i++)
{
for (j = 0; j < N; j++)
{
if (!visited[i][j])
{
cnt = 0;
id++;
DFS(i, j);
if (cnt > max)
{
max = cnt;
}
}
}
}
printf("%d\n%d\n", id, max);
}
int main()
{
int i, j;
while (scanf("%d %d", &M, &N) != -1)
{
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
scanf("%d", &map[i][j]);
}
}
Solve();
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -