最短路径问题题解

本文是作者的第三篇题解,详细介绍了如何使用迪杰克斯拉算法来解决单源最短路径问题。文章中给出了题目来源,并讨论了算法思路,包括变量定义、数组使用以及put函数的实现。同时,提供了主函数和迪杰克斯拉算法的具体代码,适合初学者参考学习。
摘要由CSDN通过智能技术生成

这是本蒟蒻的第三篇题解了

本次要讲的题名字叫最短路径问题,顾名思义,本题是要用最短路径算法的

题目原网址

关于算法的思考

本题是要求单源的最短路径,然而数据很小,所以我们可以用迪杰克斯拉算法,不会迪杰克斯拉算法的可以百度

变量定义

long long n,m,s,t,o,p,x[1200],y[1200];
long double lis[1200][1200],zj[1200],maxx=65536000;
bool flag[1200];
变量篇

long long类型:n表示点数,m表示连边数,s表示最短路径的源点,t表示最短路径的终点,o和p为输入变量(是临时输入用的)
long double类型:maxx表示无穷大

数组篇

long long类型:x和y数组用于储存点的坐标
long double类型:lis[i][j]存储从点i到点j的连边上的权值(无连边则为无穷大),zj数组是迪杰克斯拉算法求最短路径用的数组
bool类型:flag数组用于标记某个点是否被走过

put函数

void put(long long xx,long long yy)
{
   
    long double ox=x[xx],oy=y[xx],px=x[yy],py=y[yy];
    long double qx=abs(ox-px),qy=abs(oy-py);
    long double stt=sqrt(qx*qx+qy*qy);
    lis[xx][yy]=stt;
}

put函数的功能是连一条从点xx到点yy的单向边

主函数

int main()
{
   
    scanf("%lld",&n);
    for(int i=1;i<=n;i++
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值