반응형
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 | 31 |
Tags
- jsx
- 알고리즘
- 프리코스
- 선우예권
- 우아한테크코스
- 코리안챔버오케스트라
- 애플리케이션 계층
- 백엔드
- 트랜스포트 계층
- 동적 프로그래밍
- React
- 다이나믹 프로그래밍
- 위상 정렬
- 웹개발
- 깃헙
- linux
- 예술의 전당
- 네트워크 계층
- webhacking
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- 커밋메시지
- 우테코
- Upstream
- Dreamhack
- 비동기 처리
- 깃
- 자바
- 진입차수
- 서울청년문화패스
- c
Archives
- Today
- Total
yon11b
위상 정렬 문제 C 본문
반응형
조건
- 인접리스트 배열 사용
- 진입차수를 이용하여 위상정렬
- 새로 입력되는 간선에 대한 노드를 리스트의 맨 앞에 삽입해야
- 진입간선, 진출간선을 별도의 인접리스트로 보관한다.(처음에 이거 몰라서 헤맸음;;)
- 위상순서를 구하는 과정에서 동시에 방향사이클의 존재 여부를 확인할 수 있도록 코드 짜야 함
형태
<struct>
- Edge
- int origin
- int destination
- Vertex
- struct incList* inEdge
- struct incList* outEdge
- char name
- int inDegree
- IncList
- int e
- struct incList* next
<main>
- buildGraph
- 정점의 개수
- 정점의 이름
- 간선의 개수
- 간선 정보
- 새로 입력되는 간선(inEdge 혹은 outEdge)에 대한 노드를 리스트의 맨 앞에 삽입해야!!
- 방향 간선 초기화 할 때 outEdges는 시작 정점에, inEdges는 도착정점에서만 갱신해야 한다.
- Alg insertDirectedEdge(uName, wName, i) u<-index(uName) w<-index(wName) G.edges[i].origin<-u G.edges[i].destination<-w **addFirst(G.vertex[u].outEdges,i) addFirst(G.vertex[w].inEdges,i)** G.vertex[w].inDegree++;
- topologicalSort(그래프를 위상 정렬)
- vertex의 inDegree에 저장했던 정점 별 진입차수를 in 배열에 할당해준다.
- 위상순서를 구하는 과정에서 동시에 방향사이클의 존재 여부를 확인할 수 있도록 코드 짜야 함
while(!Q.isEmpty()) u <-Q.dequeue() topOrder[t]<-u t ++; for each e in G.vertex[u].outEdges w<-G.edges[e].destination **in[w] --; if (in[w]=0) Q.enqueue(w)**
728x90
'언어 > C' 카테고리의 다른 글
위상 정렬- 정점의 진입차수를 이용하여 (0) | 2022.12.03 |
---|---|
위상 정렬 개념 C (0) | 2022.12.03 |
그래프 구현하다가 삽질한 내용들 정리 (0) | 2022.11.19 |
제자리 퀵 정렬 (0) | 2022.11.19 |
Big-oh 계산법 (0) | 2022.05.17 |