• Floyed算法 最短路径


    #include<iostream>
    #include<cstdio>
    int v,e,n; //v是顶点数,e是条数
    int v1[101][101],path[101][101];
    using namespace std;

    void input(int n)
    {
    int max=99999;
    int x;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
    cin>>x;
    if(x!=0) v1[i][j]=x;
    else v1[i][j]=max;
    path[i][j]=j;
    }
    }
    void floyed(int n,int x,int y)
    {
    int i,j,k;
    for(k=1;k<=n;k++)
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    if(v1[i][j]>v1[i][k]+v1[k][j])
    v1[i][j]=v1[i][k]+v1[k][j];
    path[i][j]=path[i][k];

    cout<<v1[x][y]<<endl;
    int f=x;
    while(f!=y)
    {
    cout<<f<<"-->";
    f=path[f][y];
    }
    cout<<y;
    }
    int main()
    {
    int x,y;
    cin>>n;
    input(n);
    cin>>x>>y;
    floyed(n,x,y);
    }

  • 相关阅读:
    $prufer$序列
    倍增
    二分
    英语词汇速查表
    ACM模拟赛
    Trie树
    关于军训的模拟赛-R2
    树上差分
    列队
    斜率优化dp
  • 原文地址:https://www.cnblogs.com/lutongxi/p/5182715.html
Copyright © 2020-2023  润新知