반응형
/*
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

+ Recent posts