7-1グラフ彩色(25分)

グラフ彩色問題は、よく知られたNP完全問題です。無向グラフ所与G = V Eを、かどうかを尋ねることによって)としてK色頂点が同じ色で、その結果、どの2つの隣接する頂点Vの各色が割り当てられていませんか?

しかし、この問題はあなたを着色の問題を解決することではなく、色の割り当て与えられた、あなたは、この問題を着色液グラフであるかどうかを判断します。

入力フォーマット:

入力は、三つの整数の最初の行に指定されていないV(0 < V 。5 0 0)、E(0)及びK(0 < K V)、それぞれではない、上部グラフに向かってエッジ点の数、および色番号。頂点および1からの色号V. 次いで、両端点の両側の所定数のE線。図に示されている情報が整数正与えた後にN(2 0)、色割当て方式の数が検討されるべきです。次いで、N行は、各行が順次与えられるV頂点色(i番目の数字は表し、数字の間のスペースで区切られたi番目の頂点色)。タイトルは、与えられた無向グラフが正当であることを確認(すなわち、自重およびエッジループが存在しません)。

出力フォーマット:

溶液が出力される場合は、各色の割り当てのために、グラフ彩色問題はYes、そうでない出力No、ラインあたりの各文。

サンプル入力:

6  8  3 
2  1 
1  3 
4  6 
2  5 
2  4 
5  4 
5  6 
3  6 
4 
1  2  3  3  1  2 
4  5  6  6  4  5 
1  2  3  4  5  6 
2  3  4  2  3  4

出力例:

はい
はい
ません
#include <iostreamの> 
する#include < ストリング > 
の#include <ベクトル> 
の#include < セット >
 使用して 名前空間STDを、
ベクター <ベクトル< INT >> G(501 )。
INTの色[ 501 ] = { 0 }。
ブールチェック(int型V)の
{ 
    ためには、INTは私= 1 ; I <= V; I ++ のためのINT J = 0 ; J <G [I] .size(); J ++ 場合(色[I] == 色[G [I] [J])
                 戻り 返す ; 
} 
int型のmain()
{ 
    int型V、E、K、N。
    CIN >> V >> E >> K;
    INT iは= 0 ; I <E I ++ 
    { 
        int型開始、終了。
        CIN >>開始終了を。
        G .push_back(終了)[開始]。
        Gは.push_back(開始)[END]。
    } 
    CIN >> N。
    以下のためのint型 I = 0; I <N; I ++ 
    { 
        セット < INT > color_kind。
        INT J = 1 ; J <= V; J ++ 
        { 
            CIN >> 色[J]。
            color_kind.insert(色[J])。
        } 
        であれば(検査(V)&& color_kind.size()== K)
            COUT << " はい" << ENDL。
        他の
            裁判所未満 << " ノー" << てendl;
     
}

おすすめ

転載: www.cnblogs.com/luoyoooo/p/12215768.html