基于这篇很棒的文章http://www.geeksforgeeks.org/maximum-bipartite-matching/ ,我有一个 Ford Fulkerson 算法的工作 php 实现
目前,控制算法的矩阵可以在其单元格中具有 1 或 0 的值,以表示每个员工在该职位上工作的可能性。我想为算法增加容量,基本上在矩阵中放置更高的值,如 2、3 等,以表达选择员工而不是另一个员工的偏好。
您对如何编辑算法以增加容量有什么建议吗?
这是算法代码:
function maxMatch($matrix, $cols) {
$match = array();
foreach ($cols as $v => $item) {
$match[$item] = -1;
}
$result = 0;
foreach ($matrix as $u => $row) {
$seen = array();
foreach ($cols as $v => $item) {
$seen[$item] = 0;
}
if ($this->checkVertex($matrix, $u, $seen, $match)) {
print_r($match);
$result++;
}
}
return $match;
}
function checkVertex($matrix, $u, &$seen, &$match) {
foreach ($matrix[$u] as $v => $row) {
if ($matrix[$u][$v] && !$seen[$v]) {
$seen[$v] = TRUE;
if ($match[$v] < 0 || $this->checkVertex($matrix, $match[$v], $seen, $match)) {
$match[$v] = $u;
return TRUE;
}
}
}
return FALSE;
}
这就是我创建矩阵的方式:
function createMatrix($year, $month, $day, $shift) {
global $sql;
$result = $sql->query("VERY HUGE SELECT FOR EMPLOYEES AND POSITIONS MATCH");
while ($row = $result->fetch_assoc()) {
$matrix[$row['employee']][$row['position']] = 1;
}
return $matrix;
}
非常感谢,马可