【第22期】观点:IT 行业加班,到底有没有价值?

弗洛伊德算法模板

原创 2016年08月30日 19:50:41

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

<strong>#include<cstdio>
#include<cstring>
#include<algorithm>
#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<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 42
1 2 3
1 3 5
1 8 4
2 3 2
2 4 9
2 6 5
3 8 2
3 7 1
3 11 8
3 6 1
4 6 2
4 12 7
4 5 6
5 13 4
6 11 2
6 12 1
7 8 3
7 10 2
7 11 2
7 18 5
8 9 1
8 10 5
9 19 2
9 10 4
10 19 7
10 18 2
11 18 3
11 14 1
11 17 2
12 14 4
12 13 3
13 15 3
14 17 10
14 15 2
15 16 2
16 17 1
16 21 3
17 21 4
18 19 6
18 20 2
19 20 3
20 21 1
*/</strong>


版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

HDU 2544 最短路 (弗洛伊德模板)

Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想...
  • kavu1
  • kavu1
  • 2016-03-06 07:42
  • 289

弗洛伊德算法C语言实现

#ifndef GUIDE_H_INCLUDED #define GUIDE_H_INCLUDED #define MX 1000 //最大值 无穷 #define NUM 17 //最大顶点个数 typedef int adjmatrix[NUM...
  • mxdxm
  • mxdxm
  • 2010-10-04 22:22
  • 3482

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Floyd(弗洛伊德)算法 详解+模板

弗洛伊德算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯...

弗洛伊德(Floyd)算法求任意两点间的最短路径

Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理带权有向图或负权的最短路径问题 解决此问题有两种方法:其一是分别以图中每个顶点为源点共调用n次Dijkstra[url]http://128kj.i...
  • 128kj
  • 128kj
  • 2012-10-01 07:46
  • 3282

Stockbroker Grapevine (弗洛伊德算法)

Stockbroker Grapevine Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Ot...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)