数据结构——弗洛伊德算法

复习一下Floyd算法,代码实现很简单,3个for循环,每一层循环的意思需要深刻的理解

推荐这片博客:http://blog.csdn.net/qq_34374664/article/details/52261672 有该算法的详细解释

(2017.3.1)我下面的代码有很明显的缺点,所有的改动都是在原有的存储矩阵之上,如果需要对原图进行其他分析,需要复制一个矩阵,对后者进行改动,传递至Floyd函数内的参数不应为引用


#include
#include
#include

#define MAXVEX 100

using namespace std;

typedef struct
{
    int matrix[MAXVEX][MAXVEX];
    int numNodes, numEdges;
} Graph;

void CreateGraph(Graph *Gp)
{
    int i, j, k, w;
    bool isDirected;
    cout<<"无向图请输入0,有向图请输入1"<>isDirected;
    cout<<"请输入顶点数和边数(空格分隔):"<>Gp->numNodes>>Gp->numEdges;;
    for (i=1;i<=Gp->numNodes;i++)
    {
        for (j=1;j<=Gp->numNodes;j++)
        {
            if (i==j)
                Gp->matrix[i][j]=0;
            else
                Gp->matrix[i][j]=INT_MAX;
        }
    }
    cout<<"请输入边(vi, vj)和权值w,三个变量空格分隔即可:"<numEdges;k++)
    {
        cin>>i>>j>>w;
        Gp->matrix[i][j]=w;
        if(!isDirected)
            Gp->matrix[j][i]=Gp->matrix[i][j];
    }
}

void ShowGraph(Graph M){
    int i, j;
    for(i=1;i<=M.numNodes;i++){
        for(j=1;j<=M.numNodes;j++){
            if(M.matrix[i][j]!=INT_MAX)
                cout<

运行结果:

数据结构——弗洛伊德算法_第1张图片

你可能感兴趣的:(数据结构及算法)