-
kruskal查看全部
-
prim算法查看全部
-
最小邊函數 int CMap::getMinEdge(vector<Edge>edgeVec) { int minWeight=0; int edgeIndex=0; int i=0; for(int 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&&!m_pNodeArray[edgeVec[i].m_iNodeIndexB].m_bIsVisited)//注意不要有環路,B點不能訪問過 { if(minWeight>edgeVec[i].m_iWeightValue) { minWeight=edgeVec[i].m_iWeightValue; edgeIndex=i; } } } return edgeIndex; }查看全部
-
Prime算法 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) { 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++; int nextNodeIndex=edgeVec[edgeIndex].m_iNodeIndexB; nodeVec.push_back(nextNodeIndex); m_pNodeArray[nextNodeIndex].m_bIsVisited=true; cout<<m_pNodeArray[nextNodeIndex].m_cData<<endl; } }查看全部
-
圖的基本函數查看全部
-
圖的存儲辦法查看全部
-
最小生成樹的兩種算法查看全部
-
深度優先搜索(類似樹的前序遍歷)查看全部
-
廣度優先搜索(按層搜索)查看全部
-
鄰接多重表(無向圖)的邊和頂點的內容查看全部
-
十字鏈表的弧和頂點查看全部
-
逆鄰接表:頂點中存有入弧的頭指針,弧中裝弧尾的頂點索引查看全部
-
鄰接表查看全部
-
無向圖的鄰接矩陣(它也是對稱矩陣)查看全部
-
有向圖的領接矩陣查看全部
舉報
0/150
提交
取消