
intinya bagaimana kita meletakkan 5 ratu di papan berukuran 5x5 tanpa ada yang saling 'memakan' (tidak bolah ada ratu lain pada diagonal, horizontal, dan vertikal....). Langsung aja ni programnya.
#include <conio.h>
#define N 5 /** ukuran papan catur */
void cetak(int letak[N][N]){
int i,j; cout<<"SUSUNAN PELETAKAN\n\t";
for(i=0; i<N; ++i){
for(j=0; j<N; ++j)
cout<<letak[i][j]<<" ";
cout<<endl<<"\t"; }
cout<<"\n";}
/** return true jika letak Ratu di [baris][kolom] diterima, jika tidak return false */
bool accept(int letak[N][N], int baris, int kolom){int i,j; for (i=0; i<N; ++i){ /* check kolom */
if (letak[baris][i]) return false;}
for (i=0; i<N; ++i){ /* check baris */
for (i=baris, j=kolom; i>=0 && j>=0; i--, j--){ /* cek diagonal kiri keatas */
if (letak[i][j])return false;}
for (i=baris, j=kolom; i<N && j>=0; ++i, --j){ /* cek diagonal kiri kebawah */
if (letak[i][j])return false;}
for (i=baris, j=kolom; i>=0 && j<N; i--, ++j){ /* cek diagonal kanan keatas */
if (letak[i][j])return false;}
for (i=baris, j=kolom; i<N && j<N; ++i, ++j){ /* cek diagonal kanan kebawah */
if (letak[i][j])return false;}
return true; /* return true jika semua test lewat */}
void solve_letak(int letak[N][N], int baris){
cetak(letak);
return;}
/* letakkan ratu pada baris yang ada and cek jika letak diterima, Lanjutkan proses sampai semua posisi di temukan*/
for(i=0; i<N; ++i){
if(accept(letak, baris, i)){
letak[baris][i] = 1; solve_letak(letak, baris+1);}
letak[baris][i] = 0;}}
int main(){
cout<<"\tProgram Bactracking N Queen 27 MEI 2012\n\n";
solve_letak (letak, 0);
getch();
return 0;}
0 Komentar