演算法›Ch4 圖論演算法
第 34 題/共 111 題
◀ AL 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. VV 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 圖論演算法
本章題號 · 21–40 / 111