SDUT OJ 2143 圖結構練習——最短路徑
阿新 • • 發佈:2018-12-31
圖結構練習——最短路徑
Time Limit: 1000MS Memory limit: 65536K
題目描述
給定一個帶權無向圖,求節點1到節點n的最短路徑。輸入
輸入包含多組資料,格式如下。 第一行包括兩個整數n m,代表節點個數和邊的個數。(n<=100) 剩下m行每行3個正整數a b c,代表節點a和節點b之間有一條邊,權值為c。輸出
每組輸出佔一行,僅輸出從1到n的最短路徑權值。(保證最短路徑存在)示例輸入
3 2 1 2 1 1 3 1 1 0
示例輸出
1 0
提示
#include using namespace std; int p[200][200]; bool visit[200]; int n,m,u,v,c; int d[200][200][200]; void Deal() { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) d[0][i][j]=p[i][j]; for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) d[k][i][j]=min(d[k-1][i][j],d[k-1][i][k]+d[k-1][k][j]); printf("%d\n",d[n][1][n]); } int main() { while(cin>>n>>m) { memset(p,1010000,sizeof(p)); memset(visit,false,sizeof(visit)); for(int i=1; i<=n; i++) p[i][i]=0; for(int i=0; i>u>>v>>c; if(p[u][v]>c) { p[u][v]=p[v][u]=c; } } Deal(); } return 0; }