2

http://codeforces.com/blog/entry/337で、動的プログラミングを使用して最短のハミルトニアン パスを見つける方法に関する記事を読みました。

疑似コードは機能しますが、セットと 2^i で xor 演算子を使用する必要がある理由がわかりません。

現在訪問している都市をビットマスクから差し引いてみませんか? アルゴリズムを魔法のようにするために、セットを使用した 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];
    }
4

1 に答える 1