#Алгоритм ближайшего соседа, для поиска наименьшего (субоптимального) гамильтонового цикла
cls
$m = @(
@(0, 5, 6, 8),
@(5, 0, 7, 10),
@(6, 7, 0, 3),
@(8, 10, 3, 0)
)
function minel($vect){
$mini = 0
$min = $vect[$mini]
for ($i = 1; $i -lt $vect.Length; $i++){
if (($min -gt $vect[$i] -and $vect[$i] -ne 0) -or $min -eq 0){
$min = $vect[$i]
$mini = $i
}
}
return $mini
}
function clnei($matrix, $v){
#Алгоритм ближайшего соседа, для поиска наименьшего (субоптимального) гамильтонового цикла
$sum = 0
$mini = $v
$path = @($mini)
for($i = 0; $i -lt ($matrix.Length - 1); $i++){
$a = $mini
$mini = minel -vect $matrix[$mini]
$sum += $matrix[$a][$mini]
$path += $mini
$matrix[$a][$mini] = 0
$matrix[$mini][$a] = 0
}
$path += $v
$sum += $matrix[$mini][$v]
$path
$sum
}
$res = clnei -matrix $m -v 0
[System.String]::Join(",", $res)
cls
$m = @(
@(0, 5, 6, 8),
@(5, 0, 7, 10),
@(6, 7, 0, 3),
@(8, 10, 3, 0)
)
function minel($vect){
$mini = 0
$min = $vect[$mini]
for ($i = 1; $i -lt $vect.Length; $i++){
if (($min -gt $vect[$i] -and $vect[$i] -ne 0) -or $min -eq 0){
$min = $vect[$i]
$mini = $i
}
}
return $mini
}
function clnei($matrix, $v){
#Алгоритм ближайшего соседа, для поиска наименьшего (субоптимального) гамильтонового цикла
$sum = 0
$mini = $v
$path = @($mini)
for($i = 0; $i -lt ($matrix.Length - 1); $i++){
$a = $mini
$mini = minel -vect $matrix[$mini]
$sum += $matrix[$a][$mini]
$path += $mini
$matrix[$a][$mini] = 0
$matrix[$mini][$a] = 0
}
$path += $v
$sum += $matrix[$mini][$v]
$path
$sum
}
$res = clnei -matrix $m -v 0
[System.String]::Join(",", $res)
Комментариев нет:
Отправить комментарий