给出坐标的几点之间的最短路径问题 用C语言解 求高手帮忙

   更新日期:2024.05.02
最笨的枚举法,先算第一个点距离剩下点的最短路径,然后把第一点排除最外求剩下点最短,循环直到剩下两点。
#include <stdio.h>
#include <stdlib.h>
#define N 10

//返回最短距离的平方,两个点下标分别存在index1和index2中
//x为所有点x坐标数组,y为所有点y坐标数组,n为个数
int getShortest(int *x,int *y,int n,int& index1,int& index2);
int main(int argc, char **argv)
{
int x[10]={11,3,5,7,1,10,17,18,19,20};
int y[10]={0};
int index1,index2;

printf("%d %d %d \n",getShortest(x,y,10,index1,index2),index1,index2);
return 0;
}
/*
* 简要描述:先找出离第一个点最近的点,再把第一个点排除在外,
* 求剩余n-1个点中最近距离,递推直到剩下两个点,算法结束
*
*
* */
int getShortest(int *x,int *y,int n,int &minP1,int &minP2)
{

int *px,*py,*currX,*currY;
int minX,minY;
//当前点与第一个点之间的坐标差值
minX = abs(*(x+1) - *x);
minY = abs(*(y+1) - *y);
//坐标差值绝对值
int absX,absY;
//最短距离平方
long minLen2 ;
long currLen2;
//当前两点的索引
int *endIndex=x+1;
int *beginIndex=x;
for (px=x,py=y;px<x+n-1;px++,py++)
{

currX = px+1;
currY = py+1;
minLen2 = minX*minX+minY*minY;
while (currX<x+n)
{
absX = abs(*currX-*px);
absY = abs(*currY-*py);
/*比较大小*/
//x,y方向距离都比最小的小,无须计算
if (absX<minX&&absY<minY)
{
minX = absX;
minY = absY;
endIndex = currX;
beginIndex = px;
}
//x,y方向距离一个大一个小,计算平方比较
else if ((absX<minX&&absX>minY)||(absX<minX&&absX>minY))
{
currLen2 = (absX*absX+absY*absY);
if (minLen2>currLen2)
{
minLen2 = currLen2;
minX = absX;
minY = absY;
endIndex = currX;
beginIndex = px;
}
}
currX++;
currY++;
}
}
minP1 = beginIndex - x;
minP2 = endIndex - x;
return minLen2;
}

  • 18935578419 :c#给出已知坐标集合 怎么算最短路径
    柴习罗1995 :答:前空闲的时候用C#实现的路径规划算法,今日贴它出来,看大家有没有更好的实现方案。关于路径规划(最短路径)算法的背景知识,大家可以参考《C++算法--图算法》一书。该图算法描述的是这样的场景:图由节点和带有方向的边...
  • 18935578419 :两维坐标系中,仅能一次沿x或y走一步,从原点走到点的最短路径有...
    柴习罗1995 :答:每个点有两种走法,为了最短,不能回头,如果一个方向已经走完,另一个方向只有一条路可以走。设点(x,y)横向走1步,用a表示;纵向走一步用b表示,共走|x|a|y|b |x|个a,|y|个b的可以区分的排列总数,就是...
  • 18935578419 :数据结构课程设计作业:求任意两点的最短路径问题,写个完整的程序..急 ...
    柴习罗1995 :答:cout<<"最大整数:"<<MAXINT<<endl;int prev[6], dist[6];int i,j,n;int** myc;FILE *fp;fp=fopen("data.txt", "r");fscanf(fp,"%d", &n);myc = new int* [n+1];for(i =0; i<=n; i++)...
  • 18935578419 :请问知道几百个点的坐标,怎么用matlab遍历这些点的并求最短路径?
    柴习罗1995 :答:d1=A-repmat(B(:,1),[1 4]); %A到B1的向量 d1=sqrt(sum(d1.^2,1)); %计算距离 d2=A-repmat(B(:,2),[1 4]); %A到B2的向量 d2=sqrt(sum(d1.^2,1)); %计算距离 d3=A-repmat(B(:,3)...
  • 18935578419 :如图,在直角坐标系中,每条横线和竖线代表一条路,小明从学校(点O)放学...
    柴习罗1995 :答:从O点到C点,按理直线(斜的)最短,但是你说横线和竖线才是路,所以从O点到C点,要么先横着走一段再竖着走一段,要么先竖后横,有2个方案,从C到B又是2个方案,...,每到下一个目标都面临2种选择,所以一共...
  • 18935578419 :用matlab最短路
    柴习罗1995 :答:用graphshortestpath()函数,可以解决最短路径问题。实现代码如下:W = [.41 .99 .51 .32 .15 .45 .38 .32 .36 .29 .21];DG = sparse([6 1 2 2 3 4 4 5 5 6 1],[2 6 3 5 4 1 6 3 4 3 ...
  • 18935578419 :求计算三维点云中两点之间的最短测地路径的C++代码
    柴习罗1995 :答:d为到各点的距离,dist[i][j]指的是第i个到第j个点之间的距离。一开始初始path[i]=i;最后调用函数 void printpath(int x){ if (x!=path[x])printpath(path[x])pritnf("%d ",x);} 有不懂还可以问 ...
  • 18935578419 :急求代码:已知点的坐标,怎样用MATLAB软件求最短路径,并画图
    柴习罗1995 :答:有坐标的话,直接用distance计算两点之间的距离,然后找出最小的值
  • 18935578419 :求最短路径程序,要求如下:
    柴习罗1995 :答:其实解决这一问题的方法是由 Floyd R W 提出的算法,称之为 Floyd 算法。 给你一个求6个点任意两点间的最短距离的例子,这里的数据是自己输的,你有数据文件的话可以直接导。clear;clc;n=6; a=zeros(n);a(1,2)...
  • 18935578419 :几和最短路径问题在平面直角坐标系中总么画
    柴习罗1995 :答:连接两点的线段。在连接两点的连线中线段最短。
  • 相关链接

    欢迎反馈与建议,请联系电邮
    2024 © 视觉网