バックトラックのカラーマップ

// プログラム5-3 
の#include <iostreamの> 
する#include < 文字列・H>
 に#define MX 50
 使って 名前空間STD; 

INT X [MX];          // 溶液成分は
int型、マップ[MX] [MX]   // 図のアバットメント。マトリックス
のint SUM = 0 ;    // ソリューションの数を記録する
int型 N-、M、エッジ;   // ノードの数や色数

// 隣接行列作成
ボイドCreatMapを()
{ 
    int型U、V、
    COUT << 辺の数を入力してください:" ; 
    cinを >>エッジ。
    memsetの(地図、0はsizeof(マップ)); // 隣接行列データは0に初期化され、mesetは導入する必要があるの#include <string.hの> 
    COUT << を順次エッジに接続された2つのノードを入力して、uは持っていてくださいV、スペースで区切られた:" ;
     のためのINT I = 1 ; Iは<=エッジ; I ++ 
    { 
        CIN >> U V、
        マップ[U] [V] =マップ[V] [U] = 1 ; 
    } 
} 
// 制約
BOOL(OK INT T)
{ 
    ためINT J = 1。 ; J <T、J ++ 
    { 
        IF(マップ[T] [J])       // もし、T jの当接部と
        {
             IF(X [J] == X [T])// 分析およびT J着色の同じ数である
                リターン falseに; 
        } 
    } 
    戻り trueに; 
} 
// 検索機能は
無効(バックトラックをint型T)
{ 

    IF(T> N-)// 着色スキームを見つけるために、葉に到達
    { 
        SUM ++ ; 
        COUT << " 最初" << << SUM " :種のプログラムを" ;
         のためにint型私は= 。1;私は<= N-;私は++は)// 着色スキーム出力 
            COUT << X [I] << "  " ; 
        COUT << ENDLを; 
    } 
    {
         ためINT I = 1 ; I <= M、Iが++)// M色の各ノード試行
        { 
            X [T] = I;
             IF (OK(T))
                バックトラック(T用 + 1 ); 
        } 
    } 
} 
int型のmain()
{ 
    COUT << " 入力ノード:" ; 
    CIN > >N-、
    COUTは << " 色数を入力:" ; 
    CIN >> mは、
    COUT << " 入力無向グラフの隣接マトリックス:" << ENDL; 
    ; CreatMap() バックトラック1 ); 
}
// プログラム5-3 
の#include <iostreamの> 
する#include < 文字列・H>
 に#define MX 50
 使って 名前空間STD; 

INT X [MX];          // 溶液成分は
int型、マップ[MX] [MX]   // 図のアバットメント。マトリックス
のint SUM = 0 ;    // ソリューションの数を記録する
int型 N-、M、エッジ;   // ノードの数や色数

// 隣接行列作成
ボイドCreatMapを()
{ 
    int型U、V、
    COUT << 辺の数を入力してください:" ; 
    cinを >> エッジ。
    memsetの(地図、0はsizeof(マップ)); // 隣接行列データは0に初期化され、mesetは導入する必要があるの#include <string.hの> 
    COUT << を順次エッジに接続された2つのノードを入力して、uは持っていてくださいV、スペースで区切られた:" ;
     のためのINT I = 1 ; Iは<=エッジ; I ++ 
    { 
        CIN >> U V、
        マップ[U] [V] =マップ[V] [U] = 1 ; 
    } 
} 
// 制約
BOOL(OK INT T)
{ 
    ためINT J = 1。 ; J <T、J ++ 
    { 
        IF(マップ[T] [J])       // もし、T jの当接部と
        {
             IF(X [J] == X [T])// 分析およびT J着色の同じ数である
                リターン falseに; 
        } 
    } 
    戻り trueに; 
} 
// 検索機能は
無効(バックトラックをint型T)
{ 

    IF(T> N-)// 着色スキームを見つけるために、葉に到達
    { 
        SUM ++ ; 
        COUT << " 最初" << << SUM " :種のプログラムを" ;
         のためにint型私は= 。1;私は<= N-;私は++は)// 着色スキーム出力 
            COUT << X [I] << "  " ; 
        COUT << ENDLを; 
    } 
    {
         ためINT I = 1 ; I <= M、Iが++)// M色の各ノード試行
        { 
            X [T] = I;
             IF (OK(T))
                バックトラック(T用 + 1 ); 
        } 
    } 
} 
int型のmain()
{ 
    COUT << " 入力ノード:" ; 
    CIN > >N-、
    COUTは << " 色数を入力:" ; 
    CIN >> mは、
    COUT << " 入力無向グラフの隣接マトリックス:" << ENDL; 
    ; CreatMap() バックトラック1 ); 
}

 

おすすめ

転載: www.cnblogs.com/xjyxp/p/11332517.html