指导一下呗,这个程序只能输出最短距离的长度,但是加入哪些程序可以输出达到最短距离的路径点

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<windows.h>
#define Min(a,b) a<b?a:b
typedef struct LNode //声明结构体类型
{ int x;
int y;
} LinkNode; //定义结构体体变量

LinkNode *a[4],*O; //定义数组指针

//定义一个函数,求两点间距离
int Abs(LinkNode *p,LinkNode *q)
{
int k;
k=sqrt(pow(p->x -q->x,2)+pow(p->y -q->y,2 ));
return(k); //k的返回值为两点间距离
}

//求最短路径
int DistanceB4(int p,int q)
{ LinkNode *m,*n;
int i=0,j=0,M,N,D1,D2;
do{
m=a[i]; //m相当于i点坐标
M=Abs(a[p],m); //调用Abs函数,求i和p点距离
i++;
}while(M!=0); //i,p点距离为0时跳出循环

do{  
    n=a[j];                            //n相当于j点坐标 
    N=Abs(a[q],n);                        //调用Abs函数,求j和q点距离 
    j++;
    }while(N!=0);                        //j,p点距离为0时跳出循环 


if(i+j!=5)
{    
    D1=Abs(a[p],a[4-i])+Abs(a[4-i],a[4-j])+Abs(a[4-j],a[q]);            //调用Abs函数,求D1路径时的距离和 
    D2=Abs(a[p],a[4-j])+Abs(a[4-j],a[4-i])+Abs(a[4-i],a[q]);            //调用Abs函数,求D2路径时的距离和 
}

else if(i*j==4)                                                            //同理
{    
    D1=Abs(a[p],a[1])+Abs(a[1],a[2])+Abs(a[2],a[q]);                    
    D2=Abs(a[p],a[2])+Abs(a[2],a[1])+Abs(a[1],a[q]);
}

else if(i*j==6)                                                       //同理
{    
    D1=Abs(a[p],a[0])+Abs(a[0],a[3])+Abs(a[3],a[q]);
    D2=Abs(a[p],a[3])+Abs(a[3],a[0])+Abs(a[0],a[q]);
}
return(Min(D1,D2));                                                    //求送货地两条路径中最短的距离 

}

//求已确定入口出口的四点间最短坐标距离之和
int ResultMinDistance()
{ int i=0,j;
int MinDistance=100000,DLine;
for(i;i<4;i++)
{ j=i+1;
for(j;j<4;j++)
{
DLine=DistanceB4(i,j)+Abs(O,a[i])+Abs(a[j],O); //从原点出发回到原点的最短距离

        return(Min(DLine,MinDistance));
    }
}

}

void save( )

{
FILE *fp;
int i;
if((fp=fopen("D:\stu.dat","wb"))==NULL)

  {
      printf("CANNOT OPEN FILE\n");
      return;
  }
  for(i=0;i<4;i++)
     if(fwrite(&a[i],sizeof(struct LNode ),1,fp)!=1)
       printf("file write error\n");
  fclose(fp);

}

int main() //主函数
{
int i=0,result;
char ch;
O=(LinkNode *)malloc(sizeof(LinkNode));
O->x =0;
O->y =0; //指针o指向原点
printf("请输入四个个坐标(形如x,y):\n"); //输入提示语
for(i;i<4;i++)
{ a[i]=(LinkNode *)malloc(sizeof(LinkNode)); //开辟一个动态内存地址

    scanf("%d,%d",&a[i]->x,&a[i]->y );                //输入xy 
  getchar(); 
}
result=ResultMinDistance();                       //调用ResultMinDistance函数,得出最短路径 
printf("\n\n最短路径是:%d",result); 

}
这个程序只能输出最短距离的长度,但是加入哪些程序可以输出达到最短距离的路径点