最小环——Floyd变种算法(C++)

摘要:
#包括<尺寸(i));sizeof(f));ans=1061109567;&n) ;b++){intt;&t);=-1)f[a][b]=i[a][b]=t;对于(inta=1;a++){对于(intb=1;a;//[(c-->a--gt;b)+(b--gt;对于(int b=1;=n;c++)如果(i[b][a]+i[a][c]<
源代码:

#include<cstdio>
#include<cstring>
int n,i[1001][1001],f[1001][1001],ans;
int main()
{
    memset(i,0x3f,sizeof(i));
    memset(f,0x3f,sizeof(f));
    ans=1061109567; //对于存储变量和数组,初始化为最大值。
    scanf("%d",&n);
    for (int a=1;a<=n;a++)
      for (int b=1;b<=n;b++)
      {
        int t;
        scanf("%d",&t);
        if (t!=-1)
          f[a][b]=i[a][b]=t;
      } //矩阵输入。
    for (int a=1;a<=n;a++)
    {
      for (int b=1;b<a;b++) //环的长度定义为一个点到另一个点的、两个不同道路的长度之和。
        for (int c=b+1;c<a;c++) //本算法将自环排除在外。
          if (ans>i[b][c]+f[c][a]+f[a][b])
            ans=i[b][c]+f[c][a]+f[a][b]; // [(c --> a --> b)+(b --> c)の最短路] 即为 b 与 c 的最小环。
      for (int b=1;b<=n;b++)
        for (int c=1;c<=n;c++)
          if (i[b][a]+i[a][c]<i[b][c])
            i[b][c]=i[b][a]+i[a][c]; //顺便利用Floyd算法,进行最短路径的更新。
    }
    printf("%d",ans);
    return 0;
}

免责声明:文章转载自《最小环——Floyd变种算法(C++)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WPF popup自动关闭如何控制多线程执行顺序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转载】51单片机data,bdata,idata,xdata使用注意事项

"51单片机编程在不同内存空间data xdata bdata定义变量的注意事项": 关键词:51 单片机 编程 不同 内存空间 data xdatabdata 定义 变量 注意事项 1、data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、data区内最好放局部变量。 因为局部变量的空间是可以...

SPOJ 8073 The area of the union of circles (圆并入门)

Sphere Online Judge (SPOJ) - Problem CIRU 【求圆并的若干种算法,圆并扩展算法】_AekdyCoin的空间_百度空间   参考AekdyCoin的圆并算法解释,根据理解写出的代码。圆并这么多题中,最基础一题。   操作如下: (1)对一个圆,获得所有与其他圆的交点作为时间戳。   a.如果这个圆不被其他任何圆覆盖,这...

用gdb调试nasm汇编程序

用gdb调试nasm汇编程序 对于一个程序员来说,调试是很重要的,可以节约找到bug的时间,不过以前在linux下一直是对c进行调试的,今天突然要对汇编进行调试还真不知道怎么调,特别是对linux下调试汇编程序基本没搞过。记得以前上课学masm时,用的是debug,貌似映像中对汇编挺难调试的。于是就在网上查了下在linux下调试nasm汇编程序的资料,看起...

Ubuntu搭建嵌入式开发(交叉编译)环境

大家都比较熟悉gcc编译家族了,但是交叉编译到arm平台的代码是不直接使用gcc的,需要类似名字的一个程序。 1、首先写一个简单的c程序,helloArm.c, 如下: 1 /* 2 * ==================================================================================...

c:if标签--判断不为空和其他的值判断

     用<c:if test=""></c:if>标签时  <c:if test="${sl.chc_status==1 }"><td>未指派</td></c:if> 一直出不来  后来才发现 不同的类型有不同的判断 一,el表达式用法: 1.项目中添加 jstl.jar  ...

二维数组指针

     最近复习C语言的时候用到了2维数组的指针做为函数形参传入,网上查了一些方法,觉得颇有深度,做了一番研究,感受颇深,写下来算是做为第一天来博客园的见证。     首先网上查了一下,就是传入2维数组指针来作为对参数的形参,如 int (*a)[2],int a[2][2] 等形式; void fun(int a[][2]) { a[1][1]=3;...