• Pada Algoritma pencarian banyak yang bisa kita temukan atau gunakan. Ada Merge Sort, Quick Sort, Bubble Sort, dan...
  • Pada dasarnya algoritma searching banyak kita jumpai. Apalagi hanya untuk mencari nilai minimum dan nilai maximum...
  • Kalian pasti sudah tahu apa itu Deret Fibonacci, ya benar. (Padahal gak jawab). Tetapi pada pembahasan kali ini kita akan membuar program...
  • Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array sudah terurut. Pengurutan Array bisa menggunakan jenis sorting ...
  • Salah satu contoh tipe algoritma brute force lainnya adalah linear search (pencarian berurutan), Dikatakan demikian karena algoritma ini menggunakan ...

Friday, July 6, 2012

Program C++ N Queen Secara Rekursif

Program C++ N Queen Secara Rekursif - Program n queen atau n ratu adalah masalah menempatkan n catur ratu pada papan catur n × n sehingga tidak ada dua ratu atau lebih menyerang satu sama lain atau saling memakan. Dengan demikian, solusi mensyaratkan bahwa tidak ada dua ratu atau lebih berbagi baris yang sama, kolom, atau diagonal.

Implementasi program n queen menggunakan bahasa c++ bisa menggunakan dua jenis perulangan. Yang pertama secara iteratif dan secara rekursif. Berikut ini adalah program c++ penempatan n ratu secara rekursif : (lihat juga program c++ nqueen secara iteratif)

#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

void cetakSolusi(int x[],int n){
    int i,j;
    char c[100][100];
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            c[i][j]='X';
        }
    }
    for(i=1;i<=n;i++)
    {
        c[i][x[i]] ='Q';
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            cout<<"\t"<<c[i][j];
        }
    cout<<endl;
    }
    cout<<endl;
}

bool tempat (int x[], int k ){
int i;
bool stop, kedudukan;
kedudukan = true;
i = 1;
stop = false;
while((i<k) && (!stop)){
if((x[i]==x[k]) || (abs(x[i]-x[k])==abs(i-k))){
kedudukan = false;
stop = true;
}else{
i++;
}
}
return kedudukan;
}

void nRatuR(int n, int k, int x[]){
bool stop;
stop = false;
while(!stop){
x[k] +=1;
        while((x[k] <= n) && ( !tempat(x,k))){
            x[k] +=1;
        }
        
        if(x[k] <= n){
            if(k == n){
                cetakSolusi(x,n);
            }else{
                nRatuR(n,k+1,x);
            }
        }
        else{
            stop = true;
            x[k]=0;
        }
}
}

int main(int argc, char *argv[])
{
    system("color f2");
    system("title Program N_Ratu - 1 Juni 2012 - dyasprogramming.blogspot.com");
    
    awal:
    int n;
    int x [100];
    cout<<"Masukkan banyak ratu : ";
    cin>>n;
    cout<<"\n\nKemungkinan yang didapatkan :\n\n";
nRatuR(n,1,x);
    cout<<"\nIngin mengulang ? (y/n) : ";
    char p;
    cin>>p;
    if(p=='y') {
               system("cls");
               goto awal;
               }
    else return EXIT_SUCCESS;
}

Jadilah yang pertama mengomentari

Post a Comment

Tutorial Algorithm and Programming ©Template Blogger Green by Dicas Blogger.

To Up