floyd 算法(o(n*n*n)

FLOYD本人认为是最好理解的图论的算法之一,不断动态加入边,进行RELAXATION。(能对付负权)
下面是例子:
#include<iostream>
using namespace std;
int a[25][25];

int main()
{
int n,m,from,to,i,distan,j,k,sum;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
a[i][j]=99999999;
}
for(i=0;i<m;i++)
{
scanf("%d%d",&from,&to);
scanf("%d",&distan);
a[from][to]=distan;
/*if(a[to][from]==99999999)
a[to][from]=distan;*/
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][k]+a[k][j]<a[i][j])
a[i][j]=a[i][k]+a[k][j];
}

sum=a[1][n]+a[n][1];
printf("%d/n",sum);
}
return 0;
}

你可能感兴趣的:(floyd 算法(o(n*n*n))