Floyd 模板

贴上手写Floyd模板

///针对点较少的图,非常实用,也能为学习高级数据结构提供帮助
#include"iostream"
#include"cstring"
#include"cstdio"

#define INF 0x3f3f3f3f //后面有相加操作如果用0x7f7f7f7f会产生负数
#define MAXN 1005

using namespace std;

int maze[MAXN][MAXN];
int n,m;

void init()                       //初始化
{
    for(int i = 0;i < MAXN;i++)
    {
        for(int j = 0;j < MAXN;j++)
        {
            maze[i][j] = INF;
            if(i == j) maze[i][j] = 0;
        }
    }
}

void floyd(int st,int en)
{
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= n;j++)
        {
            for(int k = 1;k <= n;k++)
            {
                if(maze[j][k] > maze[j][i] + maze[i][k])
                {
                    maze[j][k] = maze[j][i] + maze[i][k];
                }
            }
        }
    }
    printf("%d\n",maze[st][en]);
}

int main(void)
{
    while(~scanf("%d%d",&n,&m) && (n + m))
    {
        init();
        while(m--)
        {
            int x,y,len;
            scanf("%d%d%d",&x,&y,&len);
            if(x != y && maze[x][y] > len)         //去除自环和重边
            {
                maze[x][y] = len;
                maze[y][x] = len;
            }
        }
        int st,en;
        scanf("%d%d",&st,&en);
        floyd(st,en);
    }
    return 0;
}

你可能感兴趣的:(Floyd 模板)