用js写匈牙利最优匹配算法
时间: 2023-12-24 20:04:46 浏览: 95
我写的匈牙利算法,给出最大匹配个数
匈牙利算法是一种经典的二分图最大匹配算法,它的主要思路是从左侧顶点开始,一次一次地尝试匹配右侧顶点,直到无法再增大匹配为止。以下是用 JavaScript 实现匈牙利算法的示例代码:
```javascript
function hungarianAlgorithm(graph) {
const n = graph.length;
const m = graph[0].length;
const match = new Array(m).fill(-1);
const visited = new Array(m).fill(false);
let count = 0;
for (let i = 0; i < n; i++) {
visited.fill(false);
if (findPath(i)) {
count++;
}
}
return count;
function findPath(u) {
for (let v = 0; v < m; v++) {
if (graph[u][v] && !visited[v]) {
visited[v] = true;
if (match[v] === -1 || findPath(match[v])) {
match[v] = u;
return true;
}
}
}
return false;
}
}
```
在上述代码中,`graph` 是一个二维矩阵,表示二分图的邻接矩阵,其中 `graph[i][j]` 表示从左侧顶点 i 到右侧顶点 j 的边权重。匈牙利算法的主要逻辑在 `findPath` 函数中,它采用深度优先搜索的方式尝试增广路径,直到无法再增大匹配为止。最后统计匹配数量并返回即可。
阅读全文