相关链接 | |
---|---|
上篇链接 | Apollo 6.0前景匹配逻辑分析(hm_data_association文件夹) |
下篇链接 | - |
Apollo6.0前景匹配中用到了KM匹配方法,本博客博主参考KM算法用C++写了一个KM,并写了单元测试。其中,单元测试的例子参考了另一篇KM算法 。
1. 代码
新建myKMMatcher.cpp,将下方的代码复制并保存,然后打开终端输入
$ g++ myKMMatcher.cpp -o testKM
$ ./testKM
博主写的单元测试代码如下,代码比较简陋,对主要的变量和步骤进行了注释帮助您理解:
#include <iostream>
#include <vector>
#define INF 10000;
using namespace std;
class KMMatcher {
public:
KMMatcher() {
}
~KMMatcher() {
}
void km() {
initKM();
for (int i{
0}; i < nx; i++) {
while (true) {
cout << "i = " << i << endl;
// 初始化标志位(思考为什么要在此重置标志位)
visx.assign(nx, false);
visy.assign(ny, false);
minz = INF;
// 如果顶点i成功匹配,那么跳出循环
if (findDfs(i)) {
break;
}
// 如果匹配失败,则更新顶标,扩大相等子图
for (int j{
0}; j < nx; j++) {
if (visx[j]) {
wx[j] -= minz;
}
}
for (int k{
0}; k < ny; k++) {