#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 |
댓글