最小边这个函数是不是有点问题?
?\除了边没有被访问过这个条件外,是不是还要考虑两个顶点是不是都被访问过。例如: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) 两条边的权值的修改,下边图片是修改后我运行的结果。
举报