LeetCode刷題之路 --- 787. K 站中轉內最便宜的航班

 

C語言完整解法:

#define MaxValue 1000001

int findCheapestPrice(int n, int** flights, int flightsSize, int* flightsColSize, int src, int dst, int K) {

    /* 異常判斷 */

    if (n < 1 || n > 100 || K < 0 || K > 10000) {

        return -1;

    }

    /* 創建數組存放結果 */

    int **dp = (int **)malloc(sizeof(int *) * n);

    for (int i = 0; i < n; i++) {

        dp[i] = (int *)malloc(sizeof(int) * (K + 1));

    }

    /* 初始化數組 */

    for (int i = 0; i < n; i++) {

        for (int j = 0; j < K + 1; j++) {

            dp[i][j] = MaxValue;

        }

    }

    /* 初始化src到src的航班 */

    for (int k = 0; k <= K; k++) {

        dp[src][k] = 0;

    }

    /* 初始化src直達的航班 */

    for (int i = 0; i < flightsSize; i++) {

        if (flights[i][0] == src) {

            dp[flights[i][1]][0] = flights[i][2];

        }

    }

    /* 動態規劃 */

    for (int k = 1; k <= K; k++) {

        for (int i = 0; i < flightsSize; i++) {

            if (dp[flights[i][0]][k - 1] != MaxValue) {

                dp[flights[i][1]][k] = dp[flights[i][1]][k] > (dp[flights[i][0]][k - 1] + flights[i][2]) ? (dp[flights[i][0]][k - 1] + flights[i][2]) : dp[flights[i][1]][k];

            }

        }

    }

    return dp[dst][K] == MaxValue ? -1 : dp[dst][K];

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章