弗洛伊德算法精解与模板

弗洛伊德算法是把图中每两个节点之间的最短路都求出来,有点就是之后可以查询没量个点之间距离且不用重复计算。需要两个二维数组,三层for循环。

思想是按顺序遍历每一条路径,找到与之等价并且更短的其他路径存入这个路径位置。

给出代码和样例图


#include
#include
#include
#define MM 0x3f3f3f3f
#define size 1002
using namespace std;
int n,m,j,i,k,l;
int a[size][size],b[size][size];
int main()
{
    while(~scanf("%d%d",&n,&m)&&n+m)//输入两个数,n点的总数,m边的总数
    {
        for(i=0; i=MM)
                continue;
                for(k=1; k<=n; k++)
                {
                    if(a[j][k]>a[j][i]+a[i][k])
                    {
                        a[j][k]=a[j][i]+a[i][k];
                        b[j][k]=b[j][i];
                    }
                }
            }
        }

        scanf("%d",&i);//查询的问题数
        while(i--)
        {
            scanf("%d%d",&j,&k);//输入两个点输出之间的最短路
            if(a[j][k]


你可能感兴趣的:(图论)