最新回答 / 董瘦瘦
這是克魯斯卡爾算法的原理啊在鄰接矩陣里取出所有邊后找出最小邊最小邊對應的點不在集合中則添加進去一個在的話則把另一個添加到該點集合中兩個都在同一個點集合中,只能拋棄這條邊,為什么呢?因為會形成回環。例如:有一個點集合為{A,B,C},要找的邊為AC,對應兩個點都在,再選AC這條邊的話A-B,B-C,A-C就形成回環,所以在程序里continue跳過兩個點在不同的點集合中,說明這兩個點集合代表的邊可以通過當前這條邊連接起來,對應程序里的處理就是拼接兩個vector
2020-02-10
最新回答 / 國寶阿寶
想明白了。應該以“這一層”和“下一層”的說法來說好理解一些,畢竟以“上一層”來說,是以正在查找的和preVec里的節點有連接的節點所構成的一層節點為參照點,然而這一層節點是不一定有的。
2019-08-15
最新回答 / 夜木凝冰
????按道理講,創建動態分配的數組時是不可以初始化的,只能在后續將其所有元素逐一設置為零。????所以,在構造函數中創建完矩陣數組后,是需要給數組全部元素賦值為零的。否則就是隨機數。????有個便捷函數是:memset(m_pMatrix, 0, m_iCapacity *m_iCapacity * sizeof(int));。教程里面也有的。
2019-08-08
最新回答 / 木木暮
你的意思是在for (int i = 0; i < m_iCapacity; i++)前用?m_pNodeArray[temp].m_bIsVisited?=?true;嗎?這樣效果是一樣的,當把點放進去時就已經用到了,等下加下一個的時候才設置為已訪問有點說不過去
2019-07-27
最新回答 / 慕斯卡4155732
想通了,遞歸調用實際上是一個嵌套循環,它需要一層一層的從內將每一個for循環執行完再跳出當前循環,直到跳到第一個for循環,并繼續執行下去。這個時候nodeIndex=0,i=2,再在第一行尋找下一個點即D
2018-12-31