モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

巡回セールスマン問題をビットDPで解く (C++)

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/08/13
最終更新最終更新
2015/12/19
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    クラウドネイティブなアーキテクチャを設計するのが好きです。主にGCPを利用しています。

    0
    ステッカーを贈るとは?

    頂点数nが小さい場合に限れば、巡回セールスマン問題はビットDPの手法でうまく解くことができます。

    サンプルインプット

    頂点数n (<=15)、辺の数mの重みつき有向グラフがあり、最初頂点0にいるとします。すべての頂点を訪れて頂点0に戻ってきたときの重みの総和の最小値を求めましょう。

    n(頂点数) m(辺の数)
    Vi1 Vj1 cost1
    Vi2 Vj2 cost2
    ...
    Vim Vjm costm
    

    bitDP.in

    5 8
    0 1 3
    0 3 4
    1 2 5
    2 0 4
    2 3 5
    3 4 3
    4 0 7
    4 1 6
    

    サンプルコード

    bitDP.cpp

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    using namespace std;
    #define REP(i,n) for(int i=0; i<(int)n; i++)
    #define INF 1e9
    
    const int MAXN=16;
    int n;
    int d[MAXN][MAXN];
    int dp[1<<MAXN][MAXN];
    
    int rec(int S, int v) {
        if(dp[S][v] >= 0) return dp[S][v];
        if(S==(1<<n)-1 && v==0) return dp[S][v]=0;
        int tmp=INF;
        REP(u,n) if(!(S>>u & 1)) tmp=min(tmp, rec(S|1<<u,u)+d[v][u]);
        return dp[S][v]=tmp;
    }
    
    int main() {
        int m;
        cin>>n>>m;
        REP(i,n) REP(j,n) d[i][j]=d[j][i]=INF;
        REP(i,m) {int a,b,c; cin>>a>>b>>c; d[a][b]=c;}
        fill((int *)dp, (int *)(dp+(1<<MAXN)), -1);
        cout << rec(0,0) << endl;
        return 0;
    }
    

    実行例

    $ g++ -Wall bitDP.cpp && ./a.out < bitDP.in
    22
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    クラウドネイティブなアーキテクチャを設計するのが好きです。主にGCPを利用しています。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事