본문 바로가기
자료구조

그래프 p.93

by chaechaekim 2019. 8. 12.
#include<stdio.h>

int n; // 정점의 총 개수  
int map[30][30]; // 인접 행렬 
int visit[30]; // 방문 여부를 나타내는 배열

void DFS(int v) {
	int i;
	
	visit[v] = 1; // 정점 v를 방문했다고 표시 
	for ( i = 1; i <= n; i++) {
		// 정점 v와 정점 i가 연결되었고, 정점 i를 방문하지 않았다면 
		if ( map[v][i] == 1 && !visit[i]) {
			printf("%d에서 %d로 이동\n", v, i);
			DFS(i); // 이동된 정점 i에서 다시 탐색 시작 
		}
	}
}

int main() {
	int start; // 시작 정점 
	int v1, v2;
	
	printf("정점의 총 개수와 시작 정점을 입력하세요.:");
	scanf("%d %d", &n, &start);
	
	while(1) {
		printf("연결할 두 정점을 입력하세요.(예 3 4):");
		scanf("%d %d", &v1, &v2);
		if ( v1 == -1 && v2 == -1) break; //입력 종료 
		map[v1][v2] = map[v2][v1] = 1; // 정점 v1과 정점 v2가 연결되었다고 표시 
	}
	DFS(start); // DFS 시작! 
	
	return 0;
}

/*

정점의 총 개수와 시작 정점을 입력하세요.:5 0
연결할 두 정점을 입력하세요.(예 3 4):0 1
연결할 두 정점을 입력하세요.(예 3 4):0 2
연결할 두 정점을 입력하세요.(예 3 4):1 2
연결할 두 정점을 입력하세요.(예 3 4):2 3
연결할 두 정점을 입력하세요.(예 3 4):2 4
연결할 두 정점을 입력하세요.(예 3 4):0 4
연결할 두 정점을 입력하세요.(예 3 4):3 4
연결할 두 정점을 입력하세요.(예 3 4):-1 -1
0에서 1로 이동
1에서 2로 이동
2에서 3로 이동
3에서 4로 이동

--------------------------------
Process exited after 23.39 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .

*/

'자료구조' 카테고리의 다른 글

행렬을 이용한 BFS  (0) 2019.08.20
연결리스트 깊이 탐색  (0) 2019.08.16
재귀알고리즘을 사용한 이진 트리 순회  (0) 2019.06.11
변수 값 교환 함수  (0) 2019.05.21
포인터 제 1 법칙 (law1.c)  (0) 2019.05.20

댓글