루프 없 는 토폴로지 정렬 (DFS 구현)

1. 루프 없 는 토폴로지 정렬
// enDegree         ,                
// graph       ,              ,graph[i][j]     i  j      
//     ,i   j      ,          j,      i
int topSort(vector<vector<int>>& relayVec, vector<int>& enDegree) {
	queue<int> myQueue;
	for (int i = 0; i < enDegree.size(); ++i) {
		if (enDegree[i] == 0){
			myQueue.push(i);
		}
	}
	while(!myQueue.empty()){
	int top = myQueue.front();
	for(int i = 0;i<relayVec[top].size();++i){ //         top        1,        0,  
		if(--enDegree(relayVec[top][i])==0)
			myQueue.push(relayVec[top][i]);
	}	
}

2. 알고리즘 복잡 도 분석 상기 토폴로지 정렬 에서 처음으로 입 도 를 0 으로 하 는 정점 을 대기 열 에 추가 한 다음 에 복잡 도 는 O (n) 이다. 그 다음 에 순환 에서 한 노드 가 튀 어 나 올 때마다 이 노드 에 의존 하 는 노드 의 입 도 를 1 번 줄 이 고 의존 관 계 를 한 번 방문 하 는 것 을 찾는다. 즉, 한 변 을 방문 하 는 것 이다. 전체 절차 에서 모든 정점 과 그 인접 한 변 은 1 번 만 방문 된다.따라서 전체 시간 복잡 도 는 O (m + n) 이다.

좋은 웹페이지 즐겨찾기