題目連結: https://zerojudge.tw/ShowProblem?problemid=a674

# 內容

就是要你求 A 到 B 點途中的最小值

# 思路

一樣是窮舉兩點,找中間那點,只不過式子會變成這樣
d[i][j]=d[j][i]=min(d[i][j],max(d[i][k],d[k][j]))d[i][j] = d[j][i] = min(d[i][j],max(d[i][k],d[k][j]))

# 程式碼

#include <bits/stdc++.h>
using namespace std;
int d[101][101];
int c,s,q,idx = 0;
int x,y;
int main() {
    while(cin>>c>>s>>q&&(c||s||q)&&++idx){
        memset(d,0x3f,sizeof(d));
        for(int i = 0;i<26;i++)d[i][i]=0;
        for(int i =0,t;i<s;i++){
            cin>>x>>y>>t; d[x][y] = d[y][x] = t;
        }
        for(int k = 1;k<=100;k++)for(int i = 1;i<=100;i++)for(int j = 1;j<=100;j++)
            d[i][j] = d[j][i] = min(d[i][j],max(d[i][k],d[k][j]));
        cout<<"Case #"<<idx<<'\n';
        for(int i = 0;i<q;i++){
            cin>>x>>y;
            if(d[x][y]>400000) cout<<"no path\n";
            else cout<<d[x][y]<<'\n';
        }
    }
}
更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay