Program Pemetaan warna (Graph Coloring) C++

Ada tugas lagi seperti biasa... membuat program c++ untuk masalah pemetaan warna. "SEMANGAT"nya tidak boleh warna ada yang sama antara graph yang berhubungan...

Langusng ajha ni programnya


#include <iostream>

bool **W;
int n, m = 0;
int v, e = 0;
int x, y = 0;
int *vcolor;

bool promising (int i){
    int j = 0;
    while (++j < i){
        if ( W[i][j] && vcolor[i] == vcolor[j] )
            return false;    }
     return true;}

void m_coloring (int i){
    if (promising(i)) {
        if (i+1==n) {
            for (i=1; i<n; i++ )
                cout<<vcolor[i]<<" ";
            cout<<endl;   }
        else{
            for (int color = 1; color <= m; color++){     
                vcolor [i + 1] = color;
                m_coloring(i + 1);     }
        } } }

void initArrays(){
    for( int i = 0; i < n; i++ ){
        W[ i ] = new bool[ n ];
        vcolor[ i ] = 0;
    } }

void fillW(){
    for( int i = 0; i < n; i++ ){
        for( int j = 0; j < n; j++ ){
            W[i][j] = false;  }  } }

void askForEdges(){
    cout << "berapa banyak sisi? ";
    cin >> e;
    cout << endl << "Masukkan sisi: (titik_x (spasi) titik_y)" << endl;

    for( int i = 0; i < e; i++ ) {
        cin >> x >> y;
        W[x][y] = true;
        W[y][x] = true;   } }

 void specialMatrixPrint(){
    cout << endl;
    for( int i = 0; i < n; i++ ){
        for( int j = 0; j < n; j++ ){
            cout << W[i][j] << " ";   }
        cout << endl;    } }

void showEdgesMatrix(){
    int i;
    cout << "\n    "; for( i = 1; i < n; i++ ) {
    cout << i << " "; }
    cout << "\n    "; for( i = 1; i < n; i++ ) {
    cout << "# "; }
    cout << endl;

    for( i = 1; i < n; i++ ){
        cout << i << " # ";
        for( int j = 1; j < n; j++ ) {
            cout << (W[i][j]? "1 ": "0 ");  }
         cout << endl;   } }

void checkFor( int i ){
    m = i;
    m_coloring( 0 ); }

int main(){
    cout << "Berapa banyak titik? " ;
    cin >> n;

    n += 1;

    W = new bool *[ n ];
    vcolor = new int[ n ];
 
    initArrays();
    fillW();
    askForEdges();
    showEdgesMatrix();

    checkFor( 4 ); //warna yang digunakan

    cin >> y;
     return 0; }

=============================================

penjelasan:

Misalnya ada graph seperti diatas.

jadi inputannya adalah ==============>>>>

 Hasil outputnya nanti berupa angka 1-4 yang mewakili warna.

Misalnya output: 1 2 3 4 3 1

berarti
titik ke 1: warna 1 (merah)
titik ke 2: warna 2 (putih)
titik ke 3: warna 3 (biru)
titik ke 4: warna 1 (hijau)
titik ke 5: warna 3 (Biru)
titik ke 6: warna 1 (merah)


TERIMA KASIH... TIDUR SIANG DULU. 

Miss U Say. 

Posting Komentar

2 Komentar

  1. Maaf sebelumnya, saya sedikit bingung dengan "titik ke 4: warna 1 (hijau)" seharusnya pada warna 1 itu berwarna "merah" bukan? kok disitu hijau? terimakasih. mohon jawabannya.

    BalasHapus