弗洛伊德算法模板

来源:互联网 发布:汽车之家淘宝 编辑:程序博客网 时间:2024/06/06 04:19

弗洛伊德算法求无向图最短路

<strong>#include<cstdio>#include<cstring>#include<algorithm>#define MM 0x3f3f3f3f#define size 1002using 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<size; i++)            for(j=0; j<size; j++)            {                if(i!=j)                    a[i][j]=MM;                else                    a[i][j]=0;                b[i][j]=j;            }//初始化两个二维数组        for(i=0; i<m; i++)        {            scanf("%d%d%d",&j,&k,&l);            a[j][k]=l;            a[k][j]=l;        }//输入路经端点和路径长        for(i=1; i<=n; i++)        {            for(j=1; j<=n; j++)            {                if(i==j)                continue;                if(a[i][j]>=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]<MM)            printf("%d\n",a[j][k]);            else            printf("-1\n");//两点之间没有路        }        printf("结束,\n输入下一个图\n");    }    return 0;}/**21 421 2 31 3 51 8 42 3 22 4 92 6 53 8 23 7 13 11 83 6 14 6 24 12 74 5 65 13 46 11 26 12 17 8 37 10 27 11 27 18 58 9 18 10 59 19 29 10 410 19 710 18 211 18 311 14 111 17 212 14 412 13 313 15 314 17 1014 15 215 16 216 17 116 21 317 21 418 19 618 20 219 20 320 21 1*/</strong>


2 0
原创粉丝点击