演算法›Ch4 圖論演算法第 34 題/共 111 題
34. Dijkstra's Algorithm、Bellman-Ford、Floyd-Warshall、Shortest Path
#AL-04-034中Dijkstra's AlgorithmBellman-FordFloyd-WarshallShortest Path
(3%) Consider the following graph and functions. is the number vertices, graph[V][V] is the adjacency matrix, and INF is the maximal number that can be stored in int. graph[u][v] is set to INF when there is no edge from u to v. Please answer the following question.
void foo1(int graph[V][V], int src)
{
int dist[V];
for (int i = 0; i < V; ++i)
dist[i] = graph[src][i];
for (int k = 2; k < V; ++k)
for (int u = 0; u < V ; ++u) {
if (u == src) continue;
for(int i=0; i < V; ++i)
if (i!=u && graph[i][u] != INF &&
dist[i]!=INF &&
dist[u]>dist[i]+graph[i][u])
dist[u]=dist[i]+graph[i][u];
}
}
int minDistance(int dist[V], bool sptSet[V]);
void foo2(int graph[V][V], int src)
{
int dist[V];
bool sptSet[V];
for (int i = 0; i < V; i++)
dist[i] = INF, sptSet[i] = false;
dist[src] = 0;
for (int count = 0; count < V - 1; count++) {
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < V; v++)
if (sptSet[v]==false && graph[u][v]!=INF
&& dist[u] != INF
&& dist[u] + graph[u][v] < dist[v])
dist[v] = dist[u] + graph[u][v];
}
}
int minDistance(int dist[V], bool sptSet[V])
{
int min = INF, min_index;
for (int v = 0; v < V; v++)
if (sptSet[v] == false && dist[v] <= min)
min = dist[v], min_index = v;
return min_index;
}
void foo3(int graph[V][V], int src)
{
int i, j, k;
int dist[V][V];
for(i=0; i<V;i++)
for(j=0;j<V;j++)
dist[i][j]=graph[i][j];
for (k = 0; k < V; k++) {
for (i = 0; i < V; i++) {
for (j = 0; j < V; j++) {
if (dist[i][k] + dist[k][j] < dist[i][j])
dist[i][j] = dist[i][k] + dist[k][j];
}
}
}
}

📄 交大114
▤完整推導請見《WH 資工筆記 · 演算法》Ch4 圖論演算法