Re: [問題] 想把整數存成陣列 該怎麼存?

看板C_and_CPP作者 (藍影)時間14年前 (2011/11/09 17:59), 編輯推噓4(400)
留言4則, 4人參與, 最新討論串2/2 (看更多)
原文恕刪。 ※ 引述《flyingcop (飛揚的杯子)》之銘言: 以下是我的猜測, 在不討論任何演算法 (原 po 使用了粒子移動、模擬退火法) 與資料結構之情況下, 問題應是簡易的 tsp 問題,看碼大概是這意思 假設有 City 個城市,所有經過之城市均不可重覆走過, 一旅行員該怎麼走才能花最少的距離走遍所有城市? 目前看程式碼和該圖執行結果 http://ppt.cc/OK~( 圖看最上面的 第 x 個粒子解,那就代表旅行員可走的一種解法, 原 po 的限制條件較鬆,起點與終點可自己挑,沒有限定住。 所以程式碼裡有一行是 if((i!=ii)&& (S.Coord[ii])<(S.Coord[i])) Coord[i] 距離上的概念是第 i 個城市到 (-∞) 之距離為何。 簡單的說原 po 使用的策略,應與 Insert Sort 想法相似, 主要是選定第 i 個城市,去 polling 1~n (不含 i) 的城市做比較, 假設第 i 個城市到 -∞ 之距離,排名是第 5 位,此時使用之變數 order=5, 便代表要第 5 個走到該城市; ex: City A B C D E F G H I J COORD 1 6 3 12 9 20 6 30 5 11 Order 1 4? 2 8 6 9 4? 10 3 7 ↑ 第六小的城市為 E 所以 原 po 想要的走法將是 A-> C -> I -> B-> G -> E -> J -> D -> F -> H , 上面的 Order ,是原 po , int t[City] 的東西。 故以原本程式碼而言,若要依序輸出所經過城市座標的話,可以這麼做 for(i=0; i<City; ++i) { printf("%d ", S.Coord[ t[i]-1 ]); } 上面這段可能有點幫助。然而不用排序法的話,用 Order polling 會有個麻煩之處, 就是 B/G 以他的方法都是 4 (二個4),所以最後出來不會有 5,直接跳 6 除非那個 -∞ 的參考點設得夠好,而且保證每個城市在座標上不會同一點, 不然還是用一般排序法為佳。 推斷原本的資料結構寫得較不好,大概是長這樣: #define City 16 // 16 個 city typedef struct tagSA{ double Coord[City]; // 座標上,紀錄每個 City 與 (-∞) 之相對位置 /* other algorithm param value define. */ }SA; SA S; 裡面只有紀錄座標,沒有紀錄要走的順序, 而 S 是不是該宣告成 arry (SA S[CNT])便不知。 若在問題規模不大,且記憶體可負荷之情況下,直接改 struct 較為方便, 也可避開 re-cal. 之窘境。 #define City 16 // 16 個 city typedef struct tagSA{ double Coord[City]; // 座標上,紀錄每個 City 與 (-∞) 之相對位置 int Order[City]; // 紀錄 Travel City 順序 double Distance; // 紀錄此走法之總距離 /* other algorithm param value define. */ }SA; 其它的便不再多言。 struct 怎麼定義,絕對會影響程式碼之可讀性與維護性, 但我比較好奇的是, pso 那裡你沒這問題,為何 pso+sa 反而出現這問題? 其餘的已超過 C language 籌範,不便多述,下次建議 詳述 其需求為佳 , 另這方面問題發到 Programming 可能較切需求。 : http://ppt.cc/OK~( : 請問一下 我的陣列參數該怎麼設比較好?! : 另外在問一下 設好了 怎麼把他們顯示出來?? -- No matter how gifted you are, alone, can not change the world. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.78.41

11/09 22:38, , 1F
有神快拜....<(_ _)>
11/09 22:38, 1F

11/09 22:52, , 2F
根本就是神..
11/09 22:52, 2F

11/10 00:50, , 3F
m(_ _)m (worship)
11/10 00:50, 3F

11/10 01:21, , 4F
PLURK!
11/10 01:21, 4F
※ 編輯: tropical72 來自: 180.177.78.41 (11/10 02:29)
文章代碼(AID): #1EkayKpE (C_and_CPP)
文章代碼(AID): #1EkayKpE (C_and_CPP)