Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 딥러닝
- MCU 딥러닝
- dfs문제
- 그리디
- 자료구조
- TensorFlow Lite
- 코테 문제
- 코테
- dfs
- 삼성역량테스트
- 영상처리
- 다이나믹프로그래밍
- 삼성코딩테스트
- 삼성코테
- 알고리즘
- 컴퓨팅사고
- 포스코 AI교육
- sort
- BFS
- bfs문제
- 포스코 교육
- 초소형머신러닝
- DP문제
- 코딩테스트
- tflite
- DP
- tinyml
- 포스코 ai 교육
- 삼성역테
- 임베디드 딥러닝
Archives
- Today
- Total
코딩뚠뚠
[기본문제풀이] topology_sort 본문
반응형
풀이 일시 : 2020-08-16
위상정렬 :
순서가 정해져 있는 작업을 차례로 수행해야 할 때 순서를 결정하기 위해 큐 사용
문제 :
topology sort 수행
시간복잡도 :
O(V+E)
풀이 :
#include <iostream>
#include <vector>
#include <queue>
#define MAX 10
using namespace std;
int n, inDegree[MAX];
vector<int> a[MAX];
void topologySort() {
int result[MAX];
queue<int> q;
for (int i = 1; i <= n; i++) {
if (inDegree[i] == 0) q.push(i); //처음에 큐에 넣을것. 진입차수0
}
for (int i = 1; i <= n; i++) {
if (q.empty()) { //다 돌기전에 큐가 빈것.
printf("사이클이 발생했습니다");
return;
}
int x = q.front(); //현재 진입차수 0인거 큐에서 뺀다
q.pop();
result[i] = x;
for (int i = 0; i < a[x].size(); i++) { //연결된걸 둘러보며
int y = a[x][i];
if (--inDegree[y] == 0) //진입차수 빼준게 0이면 큐에들어간다
q.push(y);
}
}
for (int i = 1; i <= n; i++) {
printf("%d", result[i]);
}
}
int main(void) {
n = 7;
a[1].push_back(2);
inDegree[2]++;
a[1].push_back(5);
inDegree[5]++;
a[2].push_back(3);
inDegree[3]++;
a[3].push_back(4);
inDegree[4]++;
a[4].push_back(6);
inDegree[6]++;
a[5].push_back(6);
inDegree[6]++;
a[6].push_back(7);
inDegree[7]++;
topologySort();
}
반응형
'알고리즘 문제풀이 > 기본문제풀이' 카테고리의 다른 글
[기본문제풀이] network flow (0) | 2020.12.28 |
---|---|
[기본문제풀이] 강한결합요소 (0) | 2020.12.28 |
[기본문제풀이] floydwarshall (0) | 2020.12.28 |
[기본문제풀이] dijkstra algorithm (0) | 2020.12.28 |
[기본문제풀이] 에라토스테네스의 체 (0) | 2020.12.28 |