cdoj 30 最短路 flyod

来源:互联网 发布:双系统默认启动ubuntu 编辑:程序博客网 时间:2024/05/01 22:01

题目链接:

http://acm.uestc.edu.cn/#/problem/show/30

题意:

题解:

直接floyd

代码:

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){    ll x=0,f=1;char ch=getchar();    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}    return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 100+10;int d[maxn][maxn];int main(){    int n,m;    while(scanf("%d%d",&n,&m),n+m){        for(int i=0; i<=n; i++)            for(int j=0; j<=n; j++)                d[i][j] = INF;        for(int i=0; i<m; i++){            int u,v,w; scanf("%d%d%d",&u,&v,&w);            d[u][v] = d[v][u] = w;        }        for(int k=1; k<=n; k++)            for(int i=1; i<=n; i++)                for(int j=1; j<=n; j++)                    d[i][j] = min(d[i][j],d[i][k]+d[k][j]);        cout << d[1][n] << endl;    }    return 0;}
0 0