목차/차례
`시작하는 말`
이번 과제는 위상정렬을 이용하여 다음 방향성비순환그래프(DAG)의 연결성분(Connected Component)을 찾는 프로그램을 완성하는 것이었다.
`전역 변수 부분`
int sorted[10][11] 〓 {0,};
정렬 결과를 저장하는 2차원 배열이다. 문제에서는 연결 성분이 3개이지만 문제를 푸는 컴퓨터의 입장에서는 연결 성분이 몇 개인지 알 수 없다. 그래서 넉넉하게 10개까지 저장할 수 있도록 하였다. 한 성분 당 정점은 10개까지 저장 가능한데 11개의 공간을 준 이유는, 인덱스를 0부터 쓰는 것이 아니라 1부터 쓰기 때문이다.
int cnt_separation;
연결 성분의 개수를 세는 카운터이다. 위에서 설명했듯이, 문제를 푸는 컴퓨터의 입장에서는 연결 성분이 총 몇 개인지 알 수 없으므로 이 카운터를 전역변수로 만들어서 연결 성분이 증가할 때마다 카운터를 증가시켜서 총 개수를 얻는다.
`void topsort(graph...
본문/내용
[시작하는 말]
이번 과제는 위상정렬을 이용하여 다음 방향성비순환그래프(DAG)의 연결성분(Connected Component)을 찾는 프로그램을 완성하는 것이었다.
[전역 변수 부분]
int sorted[10][11] 〓 {0,};
정렬 결과를 저장하는 2차원 배열이다. 문제에서는 연결 성분이 3개이지만 문제를 푸는 컴퓨터의 입장에서는 연결 성분이 몇 개인지 알 수 없다. 그래서 넉넉하게 10개까지 저장할 수 있도록 하였다. 한 성분 당 정점은 10개까지 저장 가능한데 11개의 공간을 준 이유는, 인덱스를 0부터 쓰는 것이 아니라 1부터 쓰기 때문이다.
int cnt_separation;
연결 성분의 개수를 세는 카운터이다. 위에서 설명했듯이, 문제를 푸는 컴퓨터의 입장에서는 연결 성분이 총 몇 개인지 알 수 없으므로 이 카운터를 전역변수로 만들어서 연결 성분이 증가할 때마다 카운터를 증가시켜서 총 개수를 얻는다.
[void topsort(graph* g) 함수에서 중요한 것들]
queue zeroin[10];
입력 차수가 0인 정점을 저장하는 배열이다. 연결 성분이 총 몇 개가 될지 알 수 없기 때문에 넉넉하게 10개를 잡았다.
int cnt_v〓0;
주어진 그래프가 DAG인지 체크해서 오류 메시…