TSP-DP 直接上js代码
function TSP(D) {
const INF = 65535
var n
= D.length
var i
, j
, k
, min
, tmp
;
var b
= 1 << (n
- 1);
var dp
= {}
var bridge
= {}
for (i
= 0; i
< n
; i
++) {
dp
[i
] = {}
bridge
[i
] = {}
for (j
= 0; j
< b
; j
++)
{
dp
[i
][j
] = -1;
bridge
[i
][j
] = -1;
}
}
for (i
= 0; i
< n
; i
++) {
dp
[i
][0] = D[i
][0]
}
for (i
= 1; i
< b
- 1; i
++) {
for (j
= 1; j
< n
; j
++) {
if ((1 << (j
- 1) & i
) == 0) {
min
= INF
for (k
= 1; k
< n
; k
++) {
if (1 << (k
- 1) & i
) {
tmp
= D[j
][k
] + dp
[k
][i
- (1 << (k
- 1))]
if (tmp
< min
) {
min
= tmp
dp
[j
][i
] = min
bridge
[j
][i
] = k
}
}
}
}
}
}
min
= INF
for(k
=1;k
<n
;k
++) {
tmp
= D[0][k
] + dp
[k
][b
-1-(1<<(k
-1))]
if( tmp
< min
) {
min
= tmp
dp
[0][b
-1] = min
bridge
[0][b
-1] = k
}
}
var mincost
= dp
[0][b
-1]
var path
= [0]
for(i
=b
-1,j
=0;i
>0;) {
j
= bridge
[j
][i
]
i
= i
-( 1<<(j
-1))
path
.push(j
)
}
path
.push(0)
return [path
, mincost
]
}
var m
= [
[0, 7, 6, 10, 13],
[7, 0, 7, 10, 10],
[6, 7, 0, 5, 9],
[10, 10, 5, 0, 6],
[13, 10, 9, 6, 0]
]
var res
= TSP(m
)
console
.log("最短路径 : ",res
[0])
console
.log("最少花费 : ",res
[1])
转载请注明原文地址: https://mac.8miu.com/read-490777.html