想了一个时间复杂度四次方,空间复杂度立方的思路,但是代码写出来却只能得10分(悲)
不知道是不是思路不严谨的原因,求助dalao找漏洞
思路如下:
给每个输入的点标号,从1号标到n号点
先建立一个三维数组a,储存的是从编号是第一个空的点出发,最终到达编号是第二个空的点,其中除了起点以外一共经历的点是第三个空的数字减去1
先计算第三个空为1的一层,根据计算距离公式,很容易就能算出来。
然后定义个变量从2循环到n−1,变量名字姑且取名为i吧,含义就是除了起点以外经过i个点到终点
然后,每一个最短的路径,其中经过的点记为p[1],p[2],…,p[i−1],p[i](终点),路径可以分解为从p[1]到p[i−1]的路径加上p[i−1]到p[i]的路程,显而易见,如果p[i−1]被确定下来,前面一段如果不是最短的路线,整个搞出来必定绕远路。
所以暴力枚举出一个p[i−1]使得这个路径达到最短,花线性的时间;每个i的取值要枚举平方阶的起点终点组合,每层是立方阶时间;枚举线性阶的i的取值,总复杂度为四次方,存中间过程,用立方的空间。
最终求出想要的结果:从一个起点出发,经历n−1个点达到终点(不算起点),枚举起点终点距离加(0,0)到起点距离,取最小值,得到答案。
然而我只得了10分,初步认为思路不严谨,待会把代码发出来,求调。