图论之最短路径 Floyd算法

/**
图论之最短路径
Floyd算法
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define INF 0x3f3f3f
int g[100][100];
void Floyd(int n)
{
    for(int k=0;k<n;k++)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(g[i][k] + g[k][j] < g[i][j])//更新值
                {
                    g[i][j] = g[i][k] + g[k][j];
                }
            }
        }
    }
}

int main ()
{
    int n, m;
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            g[i][j] = INF;
            if(i == j)
            {
                g[i][j] = 0;
            }
        }
    }

    while(m--)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        g[a][b] = c;
        g[b][a] = c;
    }
    int start, terminal;//输入起点和终点
    scanf("%d%d",&start, &terminal);
    Floyd(n);
    printf("%d\n",g[start][terminal]);

    return 0;
}
/**
4 5
0 1 1
1 3 2
0 3 4
0 2 2
2 3 1
0 3
输出3
*/

 

posted @ 2021-03-08 21:33  永恒&  阅读(62)  评论(0编辑  收藏  举报