这是本蒟蒻的第三篇题解了
本次要讲的题名字叫最短路径问题,顾名思义,本题是要用最短路径算法的
题目原网址
关于算法的思考
本题是要求单源的最短路径,然而数据很小,所以我们可以用迪杰克斯拉算法,不会迪杰克斯拉算法的可以百度
变量定义
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++