#2019-08-20
#include<stdio.h>
int n; // 정점의 최댓값
int rear, front; // 앞쪽과 뒤쪽을 나티내는 변수
int map[30][30]; // 인접 행렬
int queue[30]; // 큐
int visit[30]; // 방문 여부를 나타내는 배열
void BFS(int v) {
int i;
visit[v] = 1; //정점 v를 방문했다고 표시
printf("%d에서 시작\n",v);
queue[rear++] = v; // 큐에 v를 삽입하고 뒤쪽을 1증가시킴
while (front < rear) { // 뒤쪽이 앞쪽과 같거나 작으면 루프 탈출
// 큐의 첫번째에 있는 데이터를 제외된 값을 가져오며 앞쪽 1증가
v = queue[front++];
for (i=1; i<=n; i++) {
// 정점v와 정점 i가 마나고 정점 i를 방문하지 않은 상태일 경우
if(map[v][i] == 1 && !visit[i]) {
visit[i] = 1; 정점 i를 방문했다고 표시
printf("%d에서 %d로 이동\n", v, i);
queue[rear++] = i; // 큐에 i를 삽입하고 후단을 1 증가시킴
}
}
}
}
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가 연결되었다고 표시
}
BFS(start); // BFS 시작
return 0;
}
/*
정점의 총 개수와 시작 정점을 입력하세요.:8 0
연결할 두 정점을 입력하세요.(예 3 4):0 1
연결할 두 정점을 입력하세요.(예 3 4):0 2
연결할 두 정점을 입력하세요.(예 3 4):1 0
연결할 두 정점을 입력하세요.(예 3 4):1 3
연결할 두 정점을 입력하세요.(예 3 4):1 4
연결할 두 정점을 입력하세요.(예 3 4):2 0
연결할 두 정점을 입력하세요.(예 3 4):2 5
연결할 두 정점을 입력하세요.(예 3 4):2 6
연결할 두 정점을 입력하세요.(예 3 4):3 2
연결할 두 정점을 입력하세요.(예 3 4):3 7
연결할 두 정점을 입력하세요.(예 3 4):4 1
연결할 두 정점을 입력하세요.(예 3 4):4 7
연결할 두 정점을 입력하세요.(예 3 4):5 2
연결할 두 정점을 입력하세요.(예 3 4):5 7
연결할 두 정점을 입력하세요.(예 3 4):6 2
연결할 두 정점을 입력하세요.(예 3 4):6 7
연결할 두 정점을 입력하세요.(예 3 4):7 3
연결할 두 정점을 입력하세요.(예 3 4):7 4
연결할 두 정점을 입력하세요.(예 3 4):7 5
연결할 두 정점을 입력하세요.(예 3 4):7 6
연결할 두 정점을 입력하세요.(예 3 4):-1 -1
0에서 시작
0에서 1로 이동
0에서 2로 이동
1에서 3로 이동
1에서 4로 이동
2에서 5로 이동
2에서 6로 이동
3에서 7로 이동
--------------------------------
Process exited after 84.58 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
'자료구조' 카테고리의 다른 글
최댓값 찾기 (0) | 2019.09.03 |
---|---|
dfs-bfs(연결리스트) (0) | 2019.08.23 |
연결리스트 깊이 탐색 (0) | 2019.08.16 |
그래프 p.93 (0) | 2019.08.12 |
재귀알고리즘을 사용한 이진 트리 순회 (0) | 2019.06.11 |
댓글