연결 컴포넌트 (인접 정보 테이블 저장소를 사용하는)

벡터 인접 테이블을 달성

벡터 <INT> G [100]; // 수단은,도 100의 정점에 인접한 테이블

G [U] .push_back (V) ; // U 정점 V의 정점에서 비디오 가장자리 즉, 2 차원 어레이 G [100]를 생성하는 것과 [I]

// 정점 U 인접한 정점 V 검색

경우 ([U] 크기는 () I <G; INT 난 = 0 난 ++) {

  INT V = G [U] [I];

  .......

 }

 

 이 방법의 장점을 보여주는 테이블 인접

  메모리 공간의면의 수에 비례 적

의 단점 인접리스트 표현

(1) 다음 U 정점 V와 정점 사이의 관계의 조사를 소비하여 O (n)은 인접리스트를 검색하기 위해, U 인접한 N 정점의 수를 보자.

(2) 유효 어려운 가장자리 삭제

 

사용법 #include <iostream> 
#INCLUDE <벡터> 
#INCLUDE <적층>
 사용  공간을 성병; 

정적  CONST의  INT MAX = 100000 ;
정적  CONST  INT NIL = - 1 ; 

INT N; 
벡터 < INT > G [MAX];
INT의 색 [MAX]; 

// 深度优先遍历   
공극 DFS ( INT의 R, INT c) { 
    스택 < INT > S; 
    S.push (R); 
    색 (R) = C;
    반면 (! S.empty ()) {
         INT U = S.top (); 
        S.pop (); 
        위한 ( INT 난 = 0 ; I <G를 [U] 크기는 (); I ++ ) {
             INT의 V = G [U] [I];
            경우 (색상 [V] == NIL) { 
                색 [V] = C; 
                S.push (V); 
            } 
        } 
    } 
} 

공극 assignColor () {
     INT의 ID = 1 ;
    // 设置初始值
     ( INT I = 0; I <N-; I ++) 색상 [I] = NIL;
     // 출발 지점으로 U에 방문하지 않은 깊이 우선 탐색 
    을위한 ( INT U = 0 U <N-; U ++ ) {
         IF (컬러 [U] == NIL ) DFS (U, ID ++ ); 
    } 
} 

INT 의 main () {
     INT의 S, T, m, Q;
     // N 개의 (정점의 수)의 사용자, m은 관계의 개수 
    CIN >> N- m;
     // 인접성리스트 설정 
    을위한을 ( INT I = 0 ; I <m; I ++ ) { 
        CIN >> S T, 
        G [S] .push_back (T) 
        G [T] .push_back (S) 
    }
    // 색상이 동일한 값으로 연결될 수 깊이 우선 탐색을 정점으로 설정된다 
    ; assignColor () 
    
    CIN >> Q] 
    
     ( INT I = 0 ; I <Q; I ++ ) { 
        CIN >> S T;
         IF ( 색상 [S] == 색상 [T]) { 
            COUT << " " << ENDL; 
        } 
        다른 { 
            COUT << " NO " << ENDL; 
        } 
    } 
    
    반환  0 ;
} 

/ * 
10 9 
0 1
0 2 
3 4 
5 7 
5 6 
6 7 
6 8 
7 8 
8 9 
3 
0 1 
5-9 
1-3 
* / 

 

추천

출처www.cnblogs.com/mr-wei977955490/p/12622116.html