نمايش پست تنها
قديمي ۰۹-۱۹-۱۳۸۹, ۰۴:۲۴ بعد از ظهر   #24 (لینک دائم)
Astaraki Female
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,337 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Smile

برنامه ی زیر که به صورت بازگشتی و با روش BackTrack نوشته شده رو میشه به N وزیر به راحتی تعمیم داد:

كد:
 
#include <iostream>
#include <stdlib.h>
#include<conio.h>
using namespace std;
#define N 8
bool mark[N];
int a[N];
void bt (int n)
{
if (n == N)
{
 for (int i = 0; i < N; i++, cout << endl)
  for (int j = 0; j < N; j++)
   if (a[i] == j)
    cout << "1 ";
   else
    cout << "0 ";
 cout << endl;
 getch ();
}
else
{
 for (int i = 0; i < N; i++)
  if (!mark[i])
  {
   bool b = true;
   for (int j = 0; j < n; j++)
    if (n - j == abs(i - a[j]))
     b = false;
   if (b)
   {
    mark[i] = true;
    a[n] = i;
    bt(n + 1);
    mark[i] = false;
   }
  }
}
}
int main ()
{
bt(0);
}
Astaraki آفلاين است   پاسخ با نقل قول