floyed可实现代码

floyed完整算法:
#include <iostream>
using namespace std;
class floyed
{
private:
    int vernum;
    int path[7][7];
    int dist[7][7];
public:
    floyed(int vernum,int matrix[7][7])
    {
        this->vernum=vernum;
        for(int i=0;i<vernum;i++)
        {
            for(int k=0;k<vernum;k++)
            {
                dist[i][k]=matrix[i][k];
            }
        }
        for(int i=0;i<vernum;i++)
        {
            for(int k=0;k<vernum;k++)
            {
                path[i][k]=i;
            }
        }
    }
    ~floyed(){}
    void Build()
    {
        for(int n=0;n<vernum;n++)
        {
            for(int i=0;i<vernum;i++)
            {
                for(int k=0;k<vernum;k++)
                {
                    if(dist[i][k]>dist[i][n]+dist[n][k])
                    {
                        dist[i][k]=dist[i][n]+dist[n][k];
                        path[i][k]=path[n][k];
                    }
                }
            }
        }
    }
    void print()
    {
        for(int i=0;i<vernum;i++)
        {
            for(int k=0;k<vernum;k++)
            {
                cout<<i<<"->"<<k<<":"<<dist[i][k]<<"  ";
                cout<<"路径为:"<<i;
                int j;
                j=k;
                int a[vernum]={0};
                int l=0;
                while(path[i][j]!=i)
                {
                    a[l++]=path[i][j];
                    j=path[i][j];
                }
                for(int i=l-1;i>=0;i--)
                {
                    cout<<a[i];
                }
                cout<<k<<endl;
            }
        }
        cout<<endl;
        for(int i=0;i<vernum;i++)
        {
            for(int k=0;k<vernum;k++)
            {
                cout<<path[i][k]<<" ";
            }
            cout<<endl;
        }
    }
};
int main()
{
    int vernum=7;
    //int vertex[7]={0,1,2,3,4,5,6};
    int matrix[7][7]={0,12,1000,1000,1000,16,14,
                      12,0,10,1000,1000,7,1000,
                      1000,10,0,3,5,6,1000,
                      1000,1000,3,0,4,1000,1000,
                      1000,1000,5,4,0,2,8,
                      16,7,6,1000,2,0,9,
                      14,1000,1000,1000,8,9,0};
    floyed pro(vernum,matrix);
    pro.Build();
    pro.print();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40388699/article/details/80731493