[問題] TSP問題

看板C_and_CPP (C/C++)作者 (123)時間16年前 (2009/10/14 18:01), 編輯推噓6(605)
留言11則, 4人參與, 最新討論串1/1
int main(){ ... TSP(0,0,0); printf("ANSWER=%d\n",ans); ... } void TSP(int d, int now,int mask) { if (d == NODENUM-1) //假如每個城市皆已走過,NODENUM為城市個數 { if (dp[now][mask] + dd(now,0) > ans) { ans = dp[now][mask] + dd(now, 0); //ans即為走過的距離,求最大值 } return; } for (int i=1,mm=1; i<=(NODENUM-1);++i,mm<<=1) { if (!(mask & mm)){ if (dp[now][mask] + dd(now, i) > dp[i][mask | mm]) { dp[i][mask | mm] = dp[now][mask] + dd(now, i); TSP(d+1, i, mask | mm); } } } } int dd(int i, int j) { return tsp_type2[i][j]; //城市i到城市j之間的距離 } 小弟不才,麻煩各位高手幫忙一下~~ 以下是問題所在: 編譯器用dev-c++ 4.9.9.2 在 NODENUM > 10 程式會被windows中止掉, 換用visual c++ 6.0 則不會被中止而正常運作,但偶而會出現問題 ans=0。 經過測試發現問題出在這個TSP function。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.163.118 ※ 編輯: torck 來自: 140.116.163.118 (10/14 18:03)

10/14 20:42, , 1F
dp怎麼宣告的?
10/14 20:42, 1F

10/14 20:52, , 2F
int dp[NODENUM-1][2^NODENUM]={0};
10/14 20:52, 2F

10/14 20:59, , 3F
^^^^^^^^^ 這裡不是code真的這麼寫吧??
10/14 20:59, 3F

10/14 20:59, , 4F
^在C/C++不是幾次方, 是XOR運算子喔....@_@"
10/14 20:59, 4F

10/14 21:04, , 5F
dp[i<NODENUM-1][..//另外,第二維有點浪費如果^意表平方
10/14 21:04, 5F

10/14 21:24, , 6F
宣告大小為 2^n 的陣列可以用 1<<n 表示 另外給樓上: 這個
10/14 21:24, 6F

10/14 21:24, , 7F
dp 本來這樣宣告就比較好寫的XD
10/14 21:24, 7F

10/14 21:31, , 8F
感謝大家,我改成int dp[NODENUM-1][NODENUM<<1]={0};
10/14 21:31, 8F

10/14 21:33, , 9F
和int dp[NODENUM-1][1000000]={0};問題照樣發生...
10/14 21:33, 9F
※ 編輯: torck 來自: 140.116.163.118 (10/14 21:34)

10/14 21:54, , 10F
你第二維的宣告是Nx2的意思, 不是N的2方, 更不是2的N方.
10/14 21:54, 10F

10/14 22:14, , 11F
宣告dp[NNUM-1]表示位置0~NNUM-2;你的i!=NNUM-1..
10/14 22:14, 11F
文章代碼(AID): #1ArQ6JgJ (C_and_CPP)
文章代碼(AID): #1ArQ6JgJ (C_and_CPP)