阿里在线编程测试题–派送货物,求最短路径(C语言实现)

阿里在线编程测试题–派送货物,求最短路径斜体样式
如下图,某物流派送员p,需要给 a、b、c、d. 4个快递点派送包裹,请问派送员需要选择什么样的路线,才能完成最短路程的派送。假设如图派送员的起点坐标(0,0),派送路线只能沿着图中的方格边行驶,每个小格都是正方形,且边长为1,如p到d的距离就是4。随机输入n个派送点坐标,求输出最短派送路线值(从起点开始完成n个点派送并回到起始点的距离)。
阿里在线编程测试题–派送货物,求最短路径(C语言实现)_第1张图片
输入示例:
2,2
2,8
4,4
7,2
输出:
30

阿里在线编程测试题–派送货物,求最短路径(C语言实现)_第2张图片
阿里在线编程测试题–派送货物,求最短路径(C语言实现)_第3张图片

#include
#include
#include
#include 
#define Max 4
#define Min(a,b) ax -q->x )+abs(p->y - q->y );

  return(k);
}

//求已确定入口出口的四点间最短坐标距离之和
int DistanceB4(int p,int q) 
{   LinkNode *m,*n;
    int i=0,j=0,M,N,D1,D2;
	do{  m=a[i];
	     i++; 
	     M=Abs(a[p],m);
		}while(M!=0);
	do{  n=a[j];
	     j++;
	     N=Abs(a[q],n);
		}while(N!=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]);
	     D2=Abs(a[p],a[4-j])+Abs(a[4-j],a[4-i])+Abs(a[4-i],a[q]);
	}
	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));
		}
	}
}

int main()
{   int i=0,result;
    char ch;
    O=(LinkNode *)malloc(sizeof(LinkNode));
    O->x =0;O->y =0;printf("请输入四个个坐标(形如x,y):\n");
    for(i;i<4;i++)
    {  a[i]=(LinkNode *)malloc(sizeof(LinkNode));
	    
        scanf("%d,%d",&a[i]->x,&a[i]->y );
      getchar(); 
	}
	result=ResultMinDistance();
	printf("\n\n最短路径是:%d",result); 
	Sleep(2000);
}

作者:MingZhai

你可能感兴趣的:(阿里在线编程测试题–派送货物,求最短路径(C语言实现))