티스토리 뷰

/*

가중치 그래프


최단경로 Dijkstra 알고리즘

- 음수가 아닌 가중치를 가진 단순 그래프 G에서 임의의 정점 u0(다익스트라 출발점)로부터 다른 모든 정점으로의 최단경로를 찾는 알고리즘



*/


#include <stdio.h>

#define INF 987654321;

int V, E;

int start, end;

int map[1002][1002];

int dist[1002];

int isVisited[1002];




void input() {

scanf("%d %d", &V, &E);


for (int i = 1; i <= V; i++) {

for (int j = 1; j <= V; j++) {

map[i][j] = INF;

}

dist[i] = INF;

isVisited[i] = 0;

}


for (int i = 1; i <= E; i++) {

int u, v, w;

scanf("%d %d %d", &u, &v, &w);

if (map[u][v] > w) map[u][v] = w;

}

scanf("%d", &start);

scanf("%d", &end);

}


void dijkstra() {

int min;

int v = 0;

dist[start] = 0;

for (int i = 1; i <= V; i++) {

min = INF;

for (int j = 1; j <= V; j++) {

if (isVisited[j] == 0 && min > dist[j]) {

min = dist[j];

v = j;

}

}

isVisited[v] = 1;

for (int j = 1; j <= V; j++) {

if (dist[j]>dist[v] + map[v][j] && map[v][j] != min) {

dist[j] = dist[v] + map[v][j];

}

}

}

printf("\n");

for (int i = 1; i <= V; i++) {

for (int j = 1; j <= V; j++) {

printf("%d             ", map[i][j]);

}

printf("\n");

}

}


int main() {

input();

dijkstra();

printf("%d", dist[end]);

return 0;

}



'프로그래밍 > 알고리즘' 카테고리의 다른 글

[백준 7576번]토마토문제 풀기  (2) 2017.05.19
탐욕 알고리즘  (0) 2017.03.24
붕어빵 판매하기  (0) 2017.03.20
알고리즘 개인 공부  (0) 2017.03.19
2017-03-17 알고리즘 문제 풀기  (0) 2017.03.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/10   »
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
글 보관함