最小边这个函数是不是有点问题?
?\除了边没有被访问过这个条件外,是不是还要考虑两个顶点是不是都被访问过。例如:A-B的权值为2时,不考虑两个顶点是否都被访问过的话,A、B、F就成了一个环,明显不对。
?\除了边没有被访问过这个条件外,是不是还要考虑两个顶点是不是都被访问过。例如:A-B的权值为2时,不考虑两个顶点是否都被访问过的话,A、B、F就成了一个环,明显不对。
2016-08-18
/*
A
/ | \
/ | \
B——-F——-E
\ / \ /
\ / \/
C———-D
A B C D E F G
0 1 2 3 4 5 6
A-B 6 A-E 5 A-F 1
B-C 3 B-F 2
C-F 4(8) C-D 7
D-F 8(4) D-E 2
E-F 9
*/
int Map::getMinEdge(vector<Edge> edgeVec)
{
int minWeight = 0;
int edgeIndex = 0;
int i = 0;
for ( ; i < (int)edgeVec.size(); i++)
{
if (!edgeVec[i].m_bSelected)
{
minWeight = edgeVec[i].m_iWeightValue;
edgeIndex = i;
break;
}
}
//获取最小边失败的情况
if (minWeight == 0)
{
return -1;
}
//这里i的值可以不从零开始
for ( ; i < (int)edgeVec.size(); i++)
{
if (edgeVec[i].m_bSelected)
{
continue;
}
else
{
//判断是否形成回环,形成回环时,此最小权值的边应该舍去
if (m_pNodeArray[edgeVec[i].m_iNodeIndexB].m_bIsVisited)
{
continue;
}
if (minWeight > edgeVec[i].m_iWeightValue)
{
minWeight = edgeVec[i].m_iWeightValue;
edgeIndex = i;
}
}
}
return edgeIndex;
}上面是修改的代码和C-F 4(8) D-F 8(4) 两条边的权值的修改,下边图片是修改后我运行的结果。

举报