我剛剛看了一下如何找到在這裏使用http://codeforces.com/blog/entry/337動態規劃最短哈密爾頓路徑的文章。最短哈密爾頓路徑和bitmasking
雖然僞代碼的工作原理,但我不明白爲什麼我必須考慮在集合和2^i上使用異或運算符。
爲什麼不直接從位掩碼中減去當前被壓縮的城市?爲了使算法實現這個算法,xor與這個集合有什麼關係?
澄清這裏是一塊用Java編寫的僞代碼:
public int calculate(int set, int i){
if(count(set) == 1 && (set & 1<<i) != 0){
return 0;
}
if (dp[set][i] != infinity){
return dp[set][i];
}
for (int city=0;city<n;city++){
if((set & 1<<city) == 0) continue;
dp[set][i] = Math.min(dp[set][i], calculate(set^1<<i, city) + dist[i][city]);
}
return dp[set][i];
}
你試過重寫爲dp [set] [i] = Math.min(dp [set] [i],calculate(set - 1 << i,city)+ dist [i] [city]) ;'?我認爲它也應該可以正常工作。 – songlj 2013-05-18 05:01:47