성보 문제
문제 설명
오른쪽 그림은 성곽의 지형도이다.성곽이 모두 몇 개의 방, 가장 큰 방이 얼마나 큰지 계산하는 프로그램을 만들어 보세요.성곽이 m로 분할되다×n(m≤50, n≤50)개의 네모난 블록은 각 네모난 블록마다 0~4면의 벽이 있을 수 있다.
입출력
입력
프로그램은 표준 입력 장치에서 데이터를 읽습니다. 첫 줄은 두 개의 정수로 각각 남북방향, 동서방향의 네모난 수이다. 다음 입력 줄에서 각 블록은 하나의 숫자(0≤p≤50)로 설명한다.네모난 블록 주위의 벽을 한 숫자로 표시하고, 1은 서쪽 벽, 2는 북쪽 벽, 4는 동쪽 벽, 8은 남쪽 벽을 나타낸다.각 블록은 주변 벽을 나타내는 숫자의 합으로 표시됩니다.성곽의 내벽은 두 번 계산되고 네모난 벽(1,1)의 남쪽 벽은 네모난 벽(2,1)의 북쪽 벽이기도 하다. 입력한 데이터는 성에 적어도 두 개의 방이 있다는 것을 보증한다.城의 방수, 성곽의 최대 방에 포함된 네모난 수를 출력합니다. 결과는 표준 출력 장치에 표시됩니다.
예제
샘플 입력
4
7
11 6 11 6 3 10 6
7 9 6 13 5 15 5
1 10 12 7 13 7 5
13 11 10 8 10 12 13
샘플 출력
5
9
#include
#include
#include
using namespace std;
int rooms[60][60], colors[60][60];
int maxRoomArea=0;//
int roomArea;//
int roomNum = 0;// ,
void dfs(int i, int j)
{
if( colors[i][j])
return ;
roomArea++;
colors[i][j] = roomNum;
if( (rooms[i][j] & 1) == 0) dfs(i, j-1);//
if( (rooms[i][j] & 2) == 0) dfs(i-1, j);//
if( (rooms[i][j] & 4) == 0) dfs(i, j+1);//
if( (rooms[i][j] & 8) == 0) dfs(i+1, j);//
}
int main()
{
int C, L;
cin >> C >> L;
for(int i=1; i<=C; i++)
{
for(int j=1; j<=L; j++)
{
cin >> rooms[i][j];
}
}
memset(colors, 0, sizeof(colors));
for(int i=1; i<=C; i++)
{
for(int j=1; j<=L; j++)
{
if( !colors[i][j])
{
roomArea = 0;
roomNum++;
dfs(i,j);
maxRoomArea = max(roomArea, maxRoomArea);
}
}
}
cout << roomNum << endl;
cout << maxRoomArea << endl;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.