最短路dijkstra,floyd

两点之间的最小距离,dijkstra是计算某个点到其余点的最短路径,而floyd计算任意两点间最短路

感觉两个差不多,对于某两个点a,b之间 的距离,找到一个点c,比较原距离是否大于ac的距离加cb的距离之和,我感觉我还没有深刻的理解,总是觉得会出什么疏漏,然而也找不到解决的方法,摊手,以后再多加理解

两道题输入格式是一样的,参考了hdu2112

/*************************dijkstra

//

//  main.cpp

//  dijkstra

//

//  Created by Mr.Xue on 17/1/18.

//  Copyright © 2017 Mr.Xue. All rights reserved.

//

#include <iostream>

using namespace std;

#define INF 10000

int a[1000][1000],n,d[INF];

void Init()

{

    for(int i=0;i<=150;i++)

    {

        for(int j=0;j<150;j++)

        {

            if(i==j)

                a[i][j]=0;

            else

                a[i][j]=INF;

        }

    }

}

void dijkstral()

{

    int vis[INF];

    memset(vis,0,sizeof(vis));

    for(int i=1;i<=n;i++)

        d[i]=INF;

    d[1]=0;

    for(int i=1;i<=n;i++)

    {

        int temp=INF,x;

        for(int j=1;j<=n;j++)

        {

            if(!vis[j]&&d[j]<temp)

            {

                temp=d[j];

                x=j;

                //printf("%d ",x);

            }

        }

        

        vis[x]=1;

        if(temp==INF)

            break;

        for(int j=1;j<=n;j++)

        {

            if(d[j]>d[x]+a[x][j])

                d[j]=d[x]+a[x][j];

            //printf("%d ",d[j]);

        }

    }

}

int main()

{

    int i,j,s,e,w;

    while(~scanf("%d",&n)&&n!=-1)

    {

        Init();

        scanf("%d %d",&s,&e);

        for(int k=0;k<n;k++)

        {

            scanf("%d %d %d",&i,&j,&w);

            a[i][j]=a[j][i]=w;

        }

        dijkstral();

        for(i=1;i<=n;i++)

            printf("%d ",d[i]);

        printf("\n");

    }

    

    return 0;

}

/*

6

1 2

1 3 60

1 4 30

3 5 20

4 6 10

1 6 50

6 2 10

*/



/**********************/

//  main.cpp

//  floyd

//

//  Created by Mr.Xue on 17/1/18.

//  Copyright © 2017 Mr.Xue. All rights reserved.

//


#include <iostream>

using namespace std;

#define INF 10000

int a[1000][1000],n,d[INF];

void Init()

{

    for(int i=0;i<=150;i++)

    {

        for(int j=0;j<150;j++)

        {

            if(i==j)

                a[i][j]=0;

            else

                a[i][j]=INF;

        }

    }

}

void floyd()

{

    for(int k=1;k<=n;k++)

    {

        for(int i=1;i<=n;i++)

        {

            for(int j=1;j<=n;j++)

            {

                if(a[i][j]>a[i][k]+a[k][j])

                    a[i][j]=a[i][k]+a[k][j];

            }

        }

    }

}

int main()

{

    int i,j,s,e,w;

    while(~scanf("%d",&n)&&n!=-1)

    {

        Init();

        scanf("%d %d",&s,&e);

        for(int k=0;k<n;k++)

        {

            scanf("%d %d %d",&i,&j,&w);

            a[i][j]=a[j][i]=w;

        }

        floyd();

        for(i=1;i<=n;i++)

        {

            for(j=1;j<=n;j++)

            printf("%d ",a[i][j]);

            printf("\n");

        }

    }

    return 0;

}




利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值