第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

克魯斯卡爾算法輸出結果為何出現(xiàn)這樣的錯誤呢

如圖

http://img1.sycdn.imooc.com//58be7fba0001eaf902260148.jpg

這與老師的不太一樣啊

//克魯斯卡爾算法生成樹

void?CMap::kruskalTree()?
????{
????	int?value=0;//取權值
		int?edgeCount=0;//取出最小生成樹邊的個數(shù)?
		
????	//定義存放結點集合的數(shù)組?(數(shù)組的數(shù)組)?
		vector<vector<int>?>?nodeSets;
		
		
		//第一步:取出所有邊
		vector<Edge>?edgeVec;
		for(int?i=0;i<m_iCapacity;i++)
		{
			for(int?k=i+1;k<m_iCapacity;k++)
			{
				getValueFromMatrix(i,k,value);
				if(value!=0)
				{
					Edge?edge(i,k,value);
					edgeVec.push_back(edge);
				}
			}
		}
		
		
		//第二步:從所有邊中取出組成最小生成樹的邊
		//1.找到算法結束條件
		while(edgeCount<m_iCapacity-1)
		{
		
		??//2.從邊集合中找到最小邊
	??????int?minEdgeIndex=getMinEdge(edgeVec);
	??????edgeVec[minEdgeIndex].m_bSelected=true;
		
	??????//3.找到最小邊連接的點
	??????int?nodeAIndex=edgeVec[minEdgeIndex].m_iNodeIndexA;
	??????int?nodeBIndex=edgeVec[minEdgeIndex].m_iNodeIndexB;
	??????
		??bool?nodeAIsInSet=false;
		??bool?nodeBIsInSet=false;
		??
		??int?nodeAInSetLabel=-1;
		??int?nodeBInSetLabel=-1;
		??//4.找出點所在的點的集合
		??for(int?i=0;i<nodeSets.size();i++)
		??{
		??	nodeAIsInSet=isInSet(nodeSets[i],nodeAIndex);
		??	if(nodeAInSetLabel)
		??	{
		??		nodeAInSetLabel=i;
			}
		??}
		??
		??for(int?i=0;i<nodeSets.size();i++)
		??{
		??	nodeBIsInSet=isInSet(nodeSets[i],nodeBIndex);
		??	if(nodeBIsInSet)
		??	{
		??		nodeBInSetLabel=i;
			}
		??}
		??
		??//5.根據(jù)點的所在集合的不同做出不同的處理
		??if(nodeAInSetLabel==-1&&nodeBInSetLabel==-1)
		??{
		??	vector<int>vec;
		??	vec.push_back(nodeAIndex);
		??	vec.push_back(nodeBIndex);
		??	nodeSets.push_back(vec);
		??}
		??
		??else?if(nodeAInSetLabel==-1&&nodeBInSetLabel!=-1)
		??{
		??	nodeSets[nodeBInSetLabel].push_back(nodeAIndex);
		??}
		??
		??else?if(nodeAInSetLabel!=-1&&nodeBInSetLabel==-1)
		??{
		??	nodeSets[nodeAInSetLabel].push_back(nodeBIndex);
		??}
		??
		??else?if(nodeAInSetLabel!=-1&&nodeBInSetLabel!=-1&&nodeAInSetLabel!=nodeBInSetLabel)
		??{
		??	mergeNodeSet(nodeSets[nodeAInSetLabel],nodeSets[nodeBInSetLabel]);//合并兩個集合?
		??	for(int?k=nodeBInSetLabel;k<(int)nodeSets.size()-1;k++)//刪除隊列中元素?
		??	{
		??		nodeSets[k]=nodeSets[k+1];
			}
		??}
		??else?if(nodeAInSetLabel!=-1&&nodeBInSetLabel!=-1&&nodeAInSetLabel==nodeBInSetLabel)//兩個點中同一個集合即形式回路
		??{
		??	continue;
		??}?
		??
		??m_pEdge[edgeCount]=edgeVec[minEdgeIndex];
		??edgeCount++;
		??
		??cout<<edgeVec[minEdgeIndex].m_iNodeIndexA<<"---"<<edgeVec[minEdgeIndex].m_iNodeIndexB<<"?";
		??cout<<edgeVec[minEdgeIndex].m_iWeightValue<<endl;
?????	}
????}???

bool?CMap::isInSet(vector<int>?nodeSet,int?target)
{
	for(int?i=0;i<nodeSet.size();i++)
	{
		if(nodeSet[i]==target)
		{
			return?true;
		}
	}
	return?false;
}??

void?CMap::mergeNodeSet(vector<int>?&nodeSetA,vector<int>?nodeSetB)
{
	for(int?i=0;i<(int)nodeSetB.size();i++)
	{
		nodeSetA.push_back(nodeSetB[i]);
	}
}


正在回答

3 回答

kruskalTree() 這個函數(shù)里while()循環(huán)中第一個for()循環(huán)中的if()語句判斷 把 nodeAInSetLabel 換成?nodeAIsInSet

你這個地方寫錯了

0 回復 有任何疑惑可以回復我~

同問也是這個問題

0 回復 有任何疑惑可以回復我~

設置鄰接矩陣的時候出錯了吧

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

克魯斯卡爾算法輸出結果為何出現(xiàn)這樣的錯誤呢

我要回答 關注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號