벡터 인접 테이블을 달성
벡터 <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 * /