亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為何普利姆算法輸出結果與老師的不一樣?

為何普利姆算法輸出結果與老師的不一樣?

胡離 2017-03-05 09:07:24
這是我的輸出結果與數據結構課程的不一樣這是我的主函數int?main(void) { ????CMap?*pMap=new?CMap(6); ????? ????Node?*pNodeA=new?Node('A'); ????Node?*pNodeB=new?Node('B'); ????Node?*pNodeC=new?Node('C'); ????Node?*pNodeD=new?Node('D'); ????Node?*pNodeE=new?Node('E'); ????Node?*pNodeF=new?Node('F'); ? ????? ????pMap->addNode(pNodeA); ????pMap->addNode(pNodeB); ????pMap->addNode(pNodeC); ????pMap->addNode(pNodeD); ????pMap->addNode(pNodeE); ????pMap->addNode(pNodeF); ? ????? ????? ????pMap->setValueToMatrixForUndirectedGraph(0,1,6); ????pMap->setValueToMatrixForUndirectedGraph(0,4,5); ????pMap->setValueToMatrixForUndirectedGraph(0,5,1); ????pMap->setValueToMatrixForUndirectedGraph(1,2,3); ????pMap->setValueToMatrixForUndirectedGraph(1,5,2); ????pMap->setValueToMatrixForUndirectedGraph(2,5,8); ????pMap->setValueToMatrixForUndirectedGraph(2,3,7); ????pMap->setValueToMatrixForUndirectedGraph(3,5,4); ????pMap->setValueToMatrixForUndirectedGraph(3,4,2); ????pMap->setValueToMatrixForUndirectedGraph(4,5,9); ????? ????pMap->primTree(0); ? ? ????system("pause"); ????return?0; }普利姆算法void?CMap::primTree(int?nodeIndex)//普利姆生成樹 { ????int?value=0;//邊的權值保存到value中? ????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)//邊數小于m_iCapacity-1則一直要循環? ????{ ????????int?temp=?nodeVec.back();//取出nodeIndex,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); ????????????????} ????????????} ????????}//所有邊放入備選邊集合中 ????????? ????????//從可選邊集合中找出最小的邊? ????????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++; ????????? ????????//nodeVec為點集合? ????????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=0;i<edgeVec.size();i++) ????{ ????????if(!edgeVec[i].m_bSelected) ????????{ ????????????minWeight=edgeVec[i].m_iWeightValue; ????????????edgeIndex=i; ????????????break;//這里需要注意? ????????} ????} ????? ????if(minWeight==0) ????{ ????????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 回答

?
巧若拙愛運動

TA貢獻1條經驗 獲得超0個贊

你連下標6都出來了!

感覺你的prime算法好復雜!

查看完整回答
反對 回復 2017-03-08
  • 1 回答
  • 1 關注
  • 1225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號