为了账号安全,请及时绑定邮箱和手机立即绑定

普利姆算法的输出有问题,麻烦大家看看是哪里错了,谢谢!

https://img1.sycdn.imooc.com//5b4dac06000180b306770442.jpg

void CMap::primTree(int nodeIndex)

{

int value=0;

int edgeCount=0; 

vector<int> nodeVec;

vector<Edge> edgeVec;//备选边的集合 

cout<<m_pNodeArray[nodeIndex].m_cData<<endl;

nodeVec.push_back(nodeIndex);

m_pNodeArray[nodeIndex].m_bIsVisited = true;

//

while(edgeCount<m_iCapacity-1)

{

int temp=nodeVec.back();//取出最尾部的元素

for(int i=0;i<m_iCapacity;i++)

{

getValueFromMatrix(temp,i,value);

if(value!=0)

{

if(m_pNodeArray[i].m_bIsVisited)

{

continue;

}

else

{

Edge edge(temp,i,value);

edgeVec.push_back(edge);

}

}

} //for循环做完就将与temp相关的所有边放进edgeVec中 


//从可选边集合中找出最小的边 

int edgeIndex = getMinEdge(edgeVec); 

edgeVec[edgeIndex].m_bSelected = true;

cout<<edgeVec[edgeIndex].m_iNodeIndexA<<"--"<<edgeVec[edgeIndex].m_iNodeIndexB<<"  ";

cout<<edgeVec[edgeIndex].m_iWeightValue<<endl;

m_pEdge[edgeCount] = edgeVec[edgeIndex];

edgeCount++;

int nextNodeIndex = edgeVec[edgeIndex].m_iNodeIndexB;

nodeVec.push_back(nextNodeIndex);

m_pNodeArray[nextNodeIndex].m_bIsVisited=true;

cout<<m_pNodeArray[nextNodeIndex].m_cData<<endl;

}

}

int CMap::getMinEdge(vector<Edge>edgeVec)

{

int minWeight=0;

int edgeIndex=0;

int i=0;

for(;i<edgeVec.size();i++)

{

if(!edgeVec[i].m_bSelected)

{

minWeight = edgeVec[i].m_iWeightValue;

edgeIndex =i;

break; 

}

}

if(minWeight==0)//当前edgeVec中的所有边已经被访问 

{

return -1;

}

for(;i<edgeVec.size();i++)

{

if(edgeVec[i].m_bSelected)

{

continue;

}

else

{

if(minWeight>edgeVec[i].m_iWeightValue)

{

minWeight=edgeVec[i].m_iWeightValue;

    edgeIndex = i;

}

}

}

return edgeIndex;

}


正在回答

1 回答


http://img1.sycdn.imooc.com//5b535ce30001d15406310142.jpg
这里应该是把nextnodeindex放进去 函数是nodevc.back(nextnodeindex) 你手误了 那样是放不进去的 这样的话 下一次还从A找 所以就错了

1 回复 有任何疑惑可以回复我~
#1

wonder_skye 提问者

程序是正确的,之后发现错误是在main函数中,在对图进行赋值的时候采用的了对有向图赋值的方法,所以导致结果错误。 还是谢谢您的回答!
2018-07-26 回复 有任何疑惑可以回复我~
#2

wonder_skye 提问者

程序是正确的,之后发现错误是在main函数中,在对图进行赋值的时候采用的了对有向图赋值的方法,所以导致结果错误。 还是谢谢您的回答!
2018-07-26 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

普利姆算法的输出有问题,麻烦大家看看是哪里错了,谢谢!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信