목차
문법
알고리즘
방법 2
예 2
출력
결론
백엔드 개발 C++ 정점 X와 Y가 무방향 그래프의 동일한 연결 구성요소에 있는지 쿼리

정점 X와 Y가 무방향 그래프의 동일한 연결 구성요소에 있는지 쿼리

Sep 05, 2023 pm 01:05 PM
연결된 구성요소 정점 쿼리

정점 X와 Y가 무방향 그래프의 동일한 연결 구성요소에 있는지 쿼리

그래프 이론은 모든 정점 쌍이 경로로 연결되고 다른 정점은 연결되지 않은 무방향 그래프의 하위 그래프인 연결된 구성 요소에 대한 연구를 다룹니다.

이 글에서는 C/C++ 프로그래밍 언어를 사용하여 무방향 그래프에서 두 정점 X와 Y가 동일한 연결 구성 요소에 속하는지 확인하는 방법을 살펴보겠습니다. 이 문제를 해결하기 위한 최소한 두 가지 다른 방법을 명확히 하기 전에 방법의 구문과 이론적 근거를 명확히 할 것입니다. 또한 각 방법에 대한 구체적인 코드 예제와 해당 결과를 제공합니다.

문법

제공된 코드 조각은 그래픽 표현을 위해 C++에서 세 가지 함수를 선언합니다. isConnected 함수는 두 정점 X와 Y를 가져와 동일한 연결 구성 요소에 속하는지 여부를 나타내는 부울 값을 반환합니다. addEdge 함수는 두 개의 꼭지점 X와 Y를 가져와 그래프에서 두 꼭지점 사이에 연결을 만듭니다. InitializeGraph 함수는 정수 값 n을 입력으로 사용하고 n개의 정점이 있는 그래프를 설정합니다. 이러한 기능은 깊이 우선 탐색, 너비 우선 탐색 등 다양한 그래프 알고리즘을 사용하여 실행되어 두 꼭지점의 연결성을 확인하고 그래프에서 꼭지점 간의 연결을 설정할 수 있습니다.

으아악

알고리즘

1단계 - 그래프 초기화 기능을 사용하여 지정된 정점 수로 그래프를 초기화합니다.

2단계 - addEdge 함수를 사용하여 정점 사이에 가장자리를 추가하세요

3단계 - 정점과 관련된 모든 정점을 순회하고 방문한 것으로 표시하는 그래프 순회 방법을 구현합니다.

4단계 - 구성된 그래프 순회 방법을 사용하여 정점 X와 Y를 모두 방문했는지 확인합니다.

5단계 - 정점 X와 Y를 모두 방문하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

방법

  • 방법 1 - DFS를 사용합니다. 이는 그래프를 연구하기 위해 정점을 반복적으로 방문하고 방문한 것으로 표시하는 그래프 순회 알고리즘입니다.

  • 방법 2 - 데이터 구조를 사용하여 컬렉션을 여러 하위 그룹으로 분할하는 것을 모니터링하는 통합 검색 방법을 사용합니다. 무방향 그래프의 연결된 부분을 효과적으로 식별할 수 있습니다.

방법 1

이 방법에서는 DFS를 사용하여 정점 X와 Y가 동일한 연결된 구성 요소에 있는지 확인하고 정점 X에서 시작하여 DFS를 사용하여 그래프를 탐색할 수 있습니다.

예 1

이 코드는 두 정점 X와 Y가 그래프의 동일한 연결된 구성 요소에 속하는지 확인하기 위해 평가됩니다. DFS(깊이 우선 검색) 알고리즘을 사용하여 그래프를 탐색하고 정점의 연결성을 결정합니다. 그래프는 정점 사이의 가장자리가 각 정점의 이웃 정점 목록으로 저장되는 인접 목록을 사용하여 설명됩니다. 코드는 방문한 배열을 초기화하여 DFS 순회 중에 탐색된 정점을 모니터링합니다. 정점 X에서 DFS 기능을 실행합니다. DFS 프로세스 중에 정점 Y가 방문한 것으로 발견되면 X와 Y가 모두 동일한 연결된 구성 요소의 일부임을 의미합니다. 주요 함수는 인접 목록을 생성하고 여기에 간선을 추가하여 그래프를 설정한 다음 여러 쿼리를 수행하여 두 정점이 동일한 연결된 구성 요소에 있는지 확인합니다.

으아악

출력

으아악

방법 2

이 접근 방식에서는 정점 X와 Y가 동일한 링크 구성 요소에 있는지 확인하기 위해 and find 메서드를 사용하기 위해 먼저 각 정점을 분리된 집합에 할당할 수 있습니다. 그런 다음 그래프의 각 모서리에 대해 모서리 끝점 컬렉션을 결합할 수 있습니다. 마지막으로 정점 X와 Y가 동일한 집합의 구성원인지 여부를 확인하여 이들이 관련된 구성 요소임을 나타낼 수 있습니다.

예 2

이 코드는 두 정점이 그래프의 동일한 연결된 구성 요소에 있는지 확인하는 알고리즘을 구현하고 찾습니다. 입력은 정점 수 n, 가장자리 수 m, 가장자리 배열 Edges[m][2], 쿼리 번호 q 및 쿼리 배열 Queries[q][2]의 형태로 하드코딩됩니다. merge(u, v) 함수는 정점 u를 포함하는 집합을 정점 v를 포함하는 집합과 병합합니다. areVerticesInSameComponentUnionFind(X, Y) 함수는 정점 X와 Y가 부모 노드를 찾아서 동일한 연결된 구성 요소에 있는지 확인하고 동일한지 확인합니다. 동일하면 정점은 동일한 연결된 구성요소에 있고, 그렇지 않으면 그렇지 않습니다. 쿼리 결과가 콘솔에 인쇄됩니다.

으아악

출력

으아악

결론

이 코드에서는 두 개의 방향이 지정되지 않은 그래프 정점 X와 Y가 서로 관련되어 있는지 확인하는 두 가지 방법을 소개합니다. 두 번째 전략은 결합 찾기 알고리즘을 사용하여 분리된 세트를 추적하는 반면, 첫 번째 접근 방식은 깊이 우선 검색(DFS)을 사용하여 그래프를 탐색하여 방문한 정점을 표시합니다.

위 내용은 정점 X와 Y가 무방향 그래프의 동일한 연결 구성요소에 있는지 쿼리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? C 표준 템플릿 라이브러리 (STL)는 어떻게 작동합니까? Mar 12, 2025 pm 04:50 PM

이 기사에서는 컨테이너, 반복자, 알고리즘 및 함수 인 핵심 구성 요소에 중점을 둔 C 표준 템플릿 라이브러리 (STL)에 대해 설명합니다. 일반적인 프로그래밍을 가능하게하기 위해 이러한 상호 작용, 코드 효율성 및 가독성 개선 방법에 대해 자세히 설명합니다.

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까? Mar 12, 2025 pm 04:52 PM

이 기사는 효율적인 STL 알고리즘 사용을 자세히 설명합니다. 데이터 구조 선택 (벡터 대 목록), 알고리즘 복잡성 분석 (예 : std :: sort vs. std :: partial_sort), 반복자 사용 및 병렬 실행을 강조합니다. 일반적인 함정과 같은

C 언어 데이터 구조 : 나무 및 그래프의 데이터 표현 및 작동 C 언어 데이터 구조 : 나무 및 그래프의 데이터 표현 및 작동 Apr 04, 2025 am 11:18 AM

C 언어 데이터 구조 : 트리 및 그래프의 데이터 표현은 노드로 구성된 계층 적 데이터 구조입니다. 각 노드에는 데이터 요소와 하위 노드에 대한 포인터가 포함되어 있습니다. 이진 트리는 특별한 유형의 트리입니다. 각 노드에는 최대 두 개의 자식 노드가 있습니다. 데이터는 structtreenode {intdata; structtreenode*왼쪽; structReenode*오른쪽;}을 나타냅니다. 작업은 트리 트래버스 트리 (사전 조정, 인 순서 및 나중에 순서) 검색 트리 삽입 노드 삭제 노드 그래프는 요소가 정점 인 데이터 구조 모음이며 이웃을 나타내는 오른쪽 또는 무의미한 데이터로 모서리를 통해 연결할 수 있습니다.

C에서 RValue 참조를 효과적으로 사용하려면 어떻게합니까? C에서 RValue 참조를 효과적으로 사용하려면 어떻게합니까? Mar 18, 2025 pm 03:29 PM

기사는 Move Semantics, Perfect Forwarding 및 Resource Management에 대한 C에서 RValue 참조의 효과적인 사용에 대해 논의하여 모범 사례 및 성능 향상을 강조합니다 (159 자).

C에서 예외를 효과적으로 처리하려면 어떻게해야합니까? C에서 예외를 효과적으로 처리하려면 어떻게해야합니까? Mar 12, 2025 pm 04:56 PM

이 기사는 C에서 효과적인 예외 처리를 자세히 설명하고, 시도, 캐치 및 던지기 메커니즘을 다룹니다. RAII와 같은 모범 사례, 불필요한 캐치 블록을 피하고 강력한 코드에 대한 예외를 기록합니다. 이 기사는 또한 Perf를 다룹니다

성능을 향상시키기 위해 C의 Move Semantics를 어떻게 사용합니까? 성능을 향상시키기 위해 C의 Move Semantics를 어떻게 사용합니까? Mar 18, 2025 pm 03:27 PM

이 기사는 C에서 Move Semantics를 사용하여 불필요한 복사를 피함으로써 성능을 향상시키는 것에 대해 논의합니다. STD :: MOVE를 사용하여 이동 생성자 및 할당 연산자 구현을 다루고 효과적인 APPL을위한 주요 시나리오 및 함정을 식별합니다.

보다 표현적인 데이터 조작을 위해 C 20의 범위를 어떻게 사용합니까? 보다 표현적인 데이터 조작을 위해 C 20의 범위를 어떻게 사용합니까? Mar 17, 2025 pm 12:58 PM

C 20 범위는 표현성, 합성 가능성 및 효율성으로 데이터 조작을 향상시킵니다. 더 나은 성능과 유지 관리를 위해 복잡한 변환을 단순화하고 기존 코드베이스에 통합합니다.

동적 파견은 C에서 어떻게 작동하며 성능에 어떤 영향을 미칩니 까? 동적 파견은 C에서 어떻게 작동하며 성능에 어떤 영향을 미칩니 까? Mar 17, 2025 pm 01:08 PM

이 기사는 C의 동적 파견, 성능 비용 및 최적화 전략에 대해 설명합니다. 동적 파견이 성능에 영향을 미치는 시나리오를 강조하고이를 정적 파견과 비교하여 성능과 성능 간의 트레이드 오프를 강조합니다.

See all articles