>  기사  >  백엔드 개발  >  주어진 이진 행렬에 T개의 연속적인 0 블록이 있는지 확인합니다.

주어진 이진 행렬에 T개의 연속적인 0 블록이 있는지 확인합니다.

WBOY
WBOY앞으로
2023-08-26 14:41:05606검색

주어진 이진 행렬에 T개의 연속적인 0 블록이 있는지 확인합니다.

소개

이진 행렬은 데이터를 효과적으로 표현하거나 복잡한 문제를 해결하기 위해 컴퓨터 과학 및 다양한 분야에서 널리 사용됩니다. 어떤 경우에는 주어진 이진 행렬에 연속적인 0 블록이 포함되어 있는지 여부를 식별하는 것이 중요해집니다. 이 기사에서는 주어진 이진 행렬에서 T개의 연속적인 0 블록의 존재를 감지할 수 있는 C++ 코드를 사용하는 우아한 솔루션을 살펴보겠습니다. 이 접근 방식은 직관적이고 효율적이므로 실제 구현에 적합합니다.

T개의 연속된 0블록이 있는지 확인하세요.

N x M 차원과 정수 T의 2차원 이진 행렬이 주어지면 행렬에 T개의 연속적인 0 블록이 있는지 확인해야 합니다(여기서 "연속"은 수평 또는 수직으로 인접함을 의미함). 이를 달성하기 위해 논리적, 알고리즘적 방법을 사용하여 프로세스를 단계별로 분석해 보겠습니다.

입력 확인

이진 행렬의 패턴을 탐색하기 전에 사용자 입력의 적절한 크기와 관련 특성을 확인하는 것이 중요합니다. 계산 효율성을 유지하면서 실현 가능한 결과를 제공하려면 T가 허용 가능한 범위 내에 있는지 확인해야 합니다.

행과 열 트래버스

연속된 0 블록을 효율적으로 식별하려면 행과 열을 별도로 분석해야 합니다. 예를 들어 첫 번째 행(최상위)부터 시작하여 N행(최하위)까지 모든 요소를 ​​열 방향으로 반복합니다. 열을 동시에 탐색하면 잠재적인 조합을 놓치지 않고 자연스럽게 수평 및 수직 시퀀스를 캡처하는 데 도움이 됩니다.

연속 블록 감지

연속 0을 식별하는 것은 각 행의 각 열을 반복할 때 연속 0 블록을 감지하는 초석을 형성합니다.

바이너리 행렬은 0과 1로만 구성된 배열이며, 각 요소는 각각 "꺼짐" 또는 "켜짐" 상태를 나타냅니다. 이 두 가지 상태를 분석함으로써 인접한 요소 간의 상관 관계 또는 고유한 배열을 제공할 수 있는 고유한 패턴을 식별할 수 있습니다.

이진 행렬은 다음과 같이 간주됩니다.

으아악

행렬에서 연속된 제로 블록의 수를 찾아야 합니다. T의 값은 3이다.

DFS(깊이 우선 검색)를 사용하여 행렬에서 연속적인 0 블록을 찾을 수 있습니다. 먼저 행과 열을 기준으로 행렬을 반복합니다. 이전에 액세스한 적이 없는 요소가 0개인 경우 이를 스택에 푸시하고 해당 요소에서 DFS를 시작합니다.

DFS 과정에서는 현재 셀의 이웃 셀 4개(상단, 하단, 왼쪽, 오른쪽)를 확인합니다. 이들 셀 중 하나라도 0이고 이전에 액세스한 적이 없으면 이를 스택에 푸시하고 해당 셀에서 DFS를 계속합니다.

우리는 또한 지금까지 발견된 연속 제로 블록의 수를 추적합니다. 이 개수가 T보다 크거나 같으면 "yes"를 반환합니다. 그렇지 않으면 모든 셀을 방문할 때까지 DFS를 계속합니다.

이 경우 셀 (0,1)부터 깊이 우선 검색(DFS)을 수행합니다. (0,2)와 (0,3)에서 두 개의 0 요소를 더 발견하고 이를 현재 경로에 추가합니다. 그런 다음 셀 (0,1)로 역추적하여 인접한 셀을 확인합니다. (1,1)에서 또 다른 0 요소를 발견하고 이를 현재 경로에 추가합니다. 그런 다음 셀 (0,1)로 다시 역추적하여 인접 셀을 확인합니다. 아직 방문하지 않은 요소가 0개 있는 경우는 없습니다.

그런 다음 셀 (3,1)에서 DFS를 시작합니다. (3,2)와 (3,3)에서 두 개의 0 요소를 더 발견하고 이를 현재 경로에 추가합니다. 그런 다음 셀 (3,1)로 역추적하여 인접 셀을 확인합니다. 우리는 이전에 방문하지 않은 제로 요소를 결코 만나지 않을 것입니다.

이제 행렬에서 세 개의 연속된 0 블록을 찾습니다. 이 개수는 T=3보다 크거나 같으므로 출력은 "예"입니다.

방법 1: C++ 코드는 T개의 연속적인 0 블록이 있는지 확인합니다.

목표를 달성하기 위해 방문한 셀을 추적하면서 이진 행렬에서 그래프 순회 기술을 활용할 수 있습니다. 우리는 역추적 원리와 결합된 깊이 우선 탐색(DFS) 알고리즘을 사용할 것입니다.

알고리즘

1단계: 입력 이진 행렬의 크기를 나타내는 상수 `N` 및 `M`을 정의하고, 각 배열의 크기로 보조 부울 배열 'visited' 및 'inCurrentPath'를 선언하는 등 필요한 변수를 초기화합니다. N x M이고 처음에는 두 배열의 모든 요소를 ​​false로 설정합니다.

2단계: DFS 기능 구현 및 기본 기능 포함

3단계: 입력 이진 행렬에 따라 출력이 yes 또는 no로 인쇄됩니다.

으아악

출력

으아악

결론

깊이 우선 탐색(DFS)이 포함된 그래프 순회 기법을 사용하는 제안된 C++ 코드를 활용하면 주어진 개수(T)의 연속된 0 블록이 이진 행렬에 존재하는지 여부를 편리하게 확인할 수 있습니다. 이 솔루션은 이진 행렬과 관련된 문제를 해결하는 효율적인 방법을 제공하고 연구원과 개발자가 강력한 알고리즘을 효율적으로 만들 수 있도록 해줍니다.

위 내용은 주어진 이진 행렬에 T개의 연속적인 0 블록이 있는지 확인합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제