题目描述
思路分析
采用递归+数组特性,依次判断经过每个点,之后回到原点的距离,从而选择最短的距离;
代码解析
let input = [
[3],
[0, 2, 1],
[1, 0, 2],
[9, 1, 0]], sum = 0, min = Infinity, stepList = [];
let input1 = input.shift();
for (let i = 0; i < input.length; i++) {
//从起始点开始计算
stepList.push(i)
//总体思路是利用数组的特性,判断每一个点如果是选择特性之后回到原点的最短距离
func(input, i, stepList, input[0][i])
}
function func (input, index, step, sum) {
//计算依照当前路数回到原路径需要多远的距离
if (step.length + 1 == input.length) {
//判断最小值
min = Math.min(min, sum + input[index][0])
} else {
for (let j = 0; j < input.length; j++) {
//判断是否经过当前点位
if (step.indexOf(j) != -1) continue
//当前缓存列表尾输入点
step.push(j);
//递归调用函数
func(input, j, step, sum + input[index][j]);
//当前缓存列表尾输出点
step.pop()
}
}
}
后话
只是记录,正在找工作中,各位老板缺前端的可以私信,会vue,react,ts,js,22届本科毕业,一年工作经验