반응형
/*
08/20 BFS(너비 우선 탐색)
큐의 순서대로 나타냄
*/
#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;
}
BFS(start); //DFS 시작!
return 0;
}
/*
정점의 총 개수와 시작 정점을 입력하세요. :7 0
연결한 두 정점을 입력하세요. (예 3 4): 0 1
연결한 두 정점을 입력하세요. (예 3 4): 0 2
연결한 두 정점을 입력하세요. (예 3 4): 1 3
연결한 두 정점을 입력하세요. (예 3 4): 1 4
연결한 두 정점을 입력하세요. (예 3 4): 2 5
연결한 두 정점을 입력하세요. (예 3 4): 2 6
연결한 두 정점을 입력하세요. (예 3 4): 3 7
연결한 두 정점을 입력하세요. (예 3 4): 4 7
연결한 두 정점을 입력하세요. (예 3 4): 5 7
연결한 두 정점을 입력하세요. (예 3 4): 6 7
연결한 두 정점을 입력하세요. (예 3 4): -1 -1
0에서 시작
0 에서 1로 이동
0 에서 2로 이동
1 에서 3로 이동
1 에서 4로 이동
2 에서 5로 이동
2 에서 6로 이동
3 에서 7로 이동
--------------------------------
Process exited after 70.57 seconds with return value 0
계속하려면 아무 키나 누르십시오 . . .
*/
반응형
'2019~2020 > 자료구조' 카테고리의 다른 글
최댓값 찾기 알고리즘 (0) | 2019.09.03 |
---|---|
bfs-dfs (0) | 2019.08.26 |
연결 리스트 DFS (c) (0) | 2019.08.16 |
그래프의 탐색 (0) | 2019.08.12 |
이진 탐색트리 (0) | 2019.06.17 |