#include <stdio.h> #include <string.h> #define NUMOFPOINT 205 #define INF 999999999 void InitWay(int Way[][NUMOFPOINT]) { int i, j; for(i = 0; i<NUMOFPOINT; i++) for (j = 0; j<NUMOFPOINT; Way[i][j++] = INF); } void Dijkstra(int Way[][NUMOFPOINT], int dist[], int n, int s) { int i, j, min, pos, set[NUMOFPOINT]; memset(set, 0, sizeof(set)); for (i = 0; i <= n; i++) if ( (dist[i] = Way[s][i]) != INF ) set[i] = 1; set[s] = 2; for (i = 2; i <= n; i++) { for (j = 1, min = INF; j <= n; j++) if (set[j] == 1 && dist[j] < min) { min = dist[j]; pos = j; } set[pos] = 2; for (j = 1; j <= n; j++) if ((Way[pos][j] + dist[pos] < dist[j]) || set[j] == 0) { dist[j] = Way[pos][j] + dist[pos]; set[j] = 1; } } }