void Hungarian::Enter(vector<vector<double>>& DistMatrix, vector<int>& Assignment) { int i, j; m = DistMatrix.size(); n = DistMatrix[0].size(); k = m > n ? m : n;//tìm số đỉnh nhiều nhất trong 2 bên X và Y //gán tất cả các cạnh là giá trị maxC ( rất lớn) for (i = 0; i < k; i++) { for (j = 0; j < k; j++) { if (i >= m || j >= n) { c[i][j] = maxC; continue; } if (DistMatrix[i][j] == 0) c[i][j] = maxC; else c[i][j] = DistMatrix[i][j]; } } }
时间: 2023-06-16 10:06:32 浏览: 43
这段代码是匈牙利算法中的初始化部分,主要是将给定的二分图的边权矩阵转化成匈牙利算法需要的邻接矩阵格式。具体来说,它首先确定了二分图中节点数较大的那一侧的节点数k,然后将邻接矩阵的所有元素初始化为一个非常大的值maxC。接着,对于每个有边的节点对(i,j),将邻接矩阵中对应的元素赋值为这条边的边权值。如果这条边的边权值为0,那么将邻接矩阵中对应的元素也赋值为maxC,表示这条边不存在。
需要注意的是,这段代码中的c是一个二维数组,表示邻接矩阵。其中,c[i][j]表示节点i和节点j之间的边权值。m和n分别表示二分图中左侧和右侧节点的个数。maxC是一个非常大的值,用于表示不存在的边或者没有匹配的节点对之间的距离。