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

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

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

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

二部グラフ判定プログラム例 (C++)

モーダルを閉じる

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

モーダルを閉じる

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

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

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

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

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

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

作成日作成日
2013/07/09
最終更新最終更新
2015/11/14
記事区分記事区分
一般公開

目次

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

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

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

    頂点数nで、辺の数がmのグラフが与えられているとする。隣接する頂点同士が違う色になるように二色で塗り分けられるならばそのグラフを二部グラフという。

    判定するグラフ

    n m
    V_i1 V_j1
    V_i2 V_j2
    .....
    V_im V_jm
    

    1行目は頂点数nと辺の数m、2行目からm+1行目まではそれぞれ頂点V_iと頂点V_jが辺で結ばれていることを示す。

    判定プログラム例

    二部グラフであれば"Yes", そうでなければ"No"と出力。

    bipartiteG.cpp

    #include <iostream>
    #include <vector>
    using namespace std;
    
    const int MAXN=128;
    vector<int> G[MAXN];
    int color[MAXN];
    
    int main() {
        int n,m; cin>>n>>m;
        for(int i=0; i<m; ++i) {
            int a,b; cin>>a>>b;
            G[a].push_back(b);
            G[b].push_back(a);
        }
        fill(color, color+n, -1);
    
        color[0]=0;
        bool ok=true;
        for(int i=0; i<n; ++i) {
            for(int j=0,size=G[i].size(); j<size; ++j) {
                if(color[G[i][j]]==color[i]) { ok=false; i=n; j=size; }
                else { color[G[i][j]] = !color[i]; }
            }
        }
        cout << (ok ? "Yes":"No") << endl;
        return 0;
    }
    

    実行例

    ex.1

    bipartiteG.in

    4 4
    0 1
    0 3
    1 2
    2 3
    

    出力

    $ g++ -Wall bipartiteG.cpp && ./a.out < bipartiteG.in
    Yes
    

    ex.2

    bipartiteG.in

    3 3
    0 1
    0 2
    1 2
    

    出力

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

    C/C++やアルゴリズムに注目し、実践的な知識を発信しています!

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

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

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

    Feedbacks

    Feedbacks コンセプト画像

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

      関連記事