課程
/后端開(kāi)發(fā)
/C++
/數(shù)據(jù)結(jié)構(gòu)探險(xiǎn)之圖篇
怎么辦???
2016-08-20
源自:數(shù)據(jù)結(jié)構(gòu)探險(xiǎn)之圖篇 4-4
正在回答
在主函數(shù)中設(shè)定邊的時(shí)候,采用對(duì)無(wú)向圖的賦值方法進(jìn)行,setValueToMatrixForUndirectedGraph()
nodeVect.push_back(nodeIndex);
m_pNodeArray[nodeIndex].m_bVisited=true;、、
你的最小邊都未找到,認(rèn)真查;;;
void DMap::primTree(int nodeIndex)
{
int value=0;
int edgeCount=0;
vector<int>nodeVect;
vector<Edge> edgeVect;
cout<<m_pNodeArray[nodeIndex].m_cData<<endl;
m_pNodeArray[nodeIndex].m_bVisited=true;
//*****************************************************
while(edgeCount < m_iCapacity-1)
int temp=nodeVect.back();
for(int i=0;i<m_iCapacity;i++)
getValueFromMatrix(temp,i,value);
if(value!=0)
if(m_pNodeArray[i].m_bVisited)
continue;
}
else
Edge edge(temp,i,value);
edgeVect.push_back(edge);
//從可選邊集合找出最小邊
int edgeIndex=getMinEdge(edgeVect);
edgeVect[edgeIndex].m_bSelected=true;
cout<<edgeVect[edgeIndex].m_iNodeIndexA<<"-------"<<edgeVect[edgeIndex].m_iNodeIndexB<<" ? ";
cout<<edgeVect[edgeIndex].m_iWeightValue<<endl;
m_pEdge[edgeCount]=edgeVect[edgeIndex];
edgeCount++;
int nextNodeIndex=edgeVect[edgeIndex].m_iNodeIndexB;
nodeVect.push_back (nextNodeIndex);
m_pNodeArray[nextNodeIndex].m_bVisited=true;
cout<<m_pNodeArray[nextNodeIndex].m_cData<<endl;
int ? DMap::getMinEdge(vector<Edge> edgeVect)
int minWeight=0;
int edgeIndex=0;
int i=0;
for(;i<(int)edgeVect.size();i++)
if(!edgeVect[i].m_bSelected)
minWeight=edgeVect[i].m_iWeightValue;
edgeIndex=i;
break;
if(minWeight==0)
return -1;
if(edgeVect[i].m_bSelected)
if(minWeight>edgeVect[i].m_iWeightValue)
return edgeIndex;
沒(méi)問(wèn)題的,你對(duì)錯(cuò)了。
舉報(bào)
圖是眾多實(shí)際問(wèn)題解決方案之源,從基礎(chǔ)概念入手掌握?qǐng)D的處理
3 回答打印結(jié)果老是不對(duì)。
1 回答為什么編譯程序沒(méi)問(wèn)題卻運(yùn)行不了
3 回答為什么打印矩陣結(jié)果和老師的不一樣呢?
2 回答編譯沒(méi)問(wèn)題,運(yùn)行有問(wèn)題
2 回答為何普利姆算法輸出結(jié)果與老師的不一樣?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2018-07-18
在主函數(shù)中設(shè)定邊的時(shí)候,采用對(duì)無(wú)向圖的賦值方法進(jìn)行,setValueToMatrixForUndirectedGraph()
2016-11-10
nodeVect.push_back(nodeIndex);
m_pNodeArray[nodeIndex].m_bVisited=true;、、
你的最小邊都未找到,認(rèn)真查;;;
void DMap::primTree(int nodeIndex)
{
int value=0;
int edgeCount=0;
vector<int>nodeVect;
vector<Edge> edgeVect;
cout<<m_pNodeArray[nodeIndex].m_cData<<endl;
nodeVect.push_back(nodeIndex);
m_pNodeArray[nodeIndex].m_bVisited=true;
//*****************************************************
while(edgeCount < m_iCapacity-1)
{
int temp=nodeVect.back();
for(int i=0;i<m_iCapacity;i++)
{
getValueFromMatrix(temp,i,value);
if(value!=0)
{
if(m_pNodeArray[i].m_bVisited)
{
continue;
}
else
{
Edge edge(temp,i,value);
edgeVect.push_back(edge);
}
}
}
//從可選邊集合找出最小邊
int edgeIndex=getMinEdge(edgeVect);
edgeVect[edgeIndex].m_bSelected=true;
cout<<edgeVect[edgeIndex].m_iNodeIndexA<<"-------"<<edgeVect[edgeIndex].m_iNodeIndexB<<" ? ";
cout<<edgeVect[edgeIndex].m_iWeightValue<<endl;
m_pEdge[edgeCount]=edgeVect[edgeIndex];
edgeCount++;
int nextNodeIndex=edgeVect[edgeIndex].m_iNodeIndexB;
nodeVect.push_back (nextNodeIndex);
m_pNodeArray[nextNodeIndex].m_bVisited=true;
cout<<m_pNodeArray[nextNodeIndex].m_cData<<endl;
}
}
int ? DMap::getMinEdge(vector<Edge> edgeVect)
{
int minWeight=0;
int edgeIndex=0;
int i=0;
for(;i<(int)edgeVect.size();i++)
{
if(!edgeVect[i].m_bSelected)
{
minWeight=edgeVect[i].m_iWeightValue;
edgeIndex=i;
break;
}
}
if(minWeight==0)
{
return -1;
}
for(;i<(int)edgeVect.size();i++)
{
if(edgeVect[i].m_bSelected)
{
continue;
}
else
{
if(minWeight>edgeVect[i].m_iWeightValue)
{
minWeight=edgeVect[i].m_iWeightValue;
edgeIndex=i;
}
}
}
return edgeIndex;
}
2016-09-20
沒(méi)問(wèn)題的,你對(duì)錯(cuò)了。