如下图所示,蜂窝小区,以1为中心,顺时针编号,编号最大限定为100000。
求任意两编号之间的最短距离。
两个相邻小区的距离为1
示例:19到30的最短距离为5
实现如下三个接口:
/************************************************************************
Description : 初始化蜂窝小区信息
Prototype : void InitCellularDistrict(int iMaxSeqValue)
Input Param : iMaxSeqValue 蜂窝小区的最大值编号,注:编号从1开始
Output Param : 无
Return Value : 成功返回0,失败返回-1
/************************************************************************/
int InitCellularDistrict(int iMaxSeqValue)
{
return -1;
}
/************************************************************************
Description : 计算出蜂窝小区指定两点(编号值)之间的最短距离
Prototype : int GetShortestPathLength(int iFirstValue, int iSecondValue)
Input Param : iFirstValue 起点编号值, iSecondValue 终点编号值
Output Param : 无
Return Value : 计算成功返回最短距离,失败返回-1
/************************************************************************/
int GetShortestPathLength(int iFirstValue, int iSecondValue)
{
return -1;
}
/************************************************************************
Description : 清空相关信息
Prototype : void Clear()
Input Param : 无
Output Param : 无
Return Value : 无
/************************************************************************/
void Clear()
{
}
解题思路:
1、约定:定义XYZ坐标如上图所示,X轴往左平移n个单位定义为x=-n,往右平移n个单位则定义为x=n,同理,Y轴往左上平移n个单位定义为y=n,Y轴往右下平移n个单位定义为y=-n,Z轴往右上平移n个单位定义为z=n,Z轴往左下平移n个单位定义为z=-n。如下图所示:
2、定义点坐标:有了前面的约定,整个区域内的任何一个点都可以从序号为1的蜂窝开始沿坐标轴垂直方向多次移动到达。然后我们就可以定义每个点坐标如何表示了,如下图所示:
我们取29这个点来举例说明,它所在X轴左平移2个单位处,因此x=-2,它所在Y轴左上平移3个单位处