سورس شما رو چک کردم مشکل در خط while ((Queense[q] < 8) && (!safepos))
ایجاد میشه که q مقدار 8 رو گرفته که آخرین اندیس آرایه شما 7 هست و خطا میدهد آرایه رو بزرگ کردم ولی الگوریتم جواب نمی دهد پس احتمالا اشکالات بیشتری در پیاده سازی شما از لحاظ مفهومی وجود دارد که من الگوریتمی که شما از اون استفاده کردید رو نمی دونم در اینجا یک پیاده سازی از الگوریتم ان وزیر براتون میزارم که از روی الگوریتم کتاب طراحی الگوریتم ترجمه جعفر نژاد پیاده سازی کردم
using System;
public class nqueens
{
int count = 0;
static int n;
static int[] col;
public void queens(int i)
{
int j;
if (promising(i))
if (i == n)
{
count++;
Console.WriteLine("hale{0}:",count);
for (int c = 1; c <= n; C++)
{
Console.WriteLine("satre {0} ,sotone {1}", c, col[c]);
}
Console.WriteLine("");
}
else
for (j = 1; j <= n; j++)//see if queen in (i+1)st row
{ //can be positioned in each of the n columns
col[i + 1] = j;
queens(i + 1);
}
}
private bool promising(int i)
{
int k = 1;
bool flag = true;//check if any queen threatens
while (k < i && flag)//queen in the ith row
{
if (col[i] == col[k] || Math.Abs(col[i] - col[k]) == i - k)
flag = false;
k++;
}
return flag;
}
public static void Main(string[] args)
{
n = 8;
col = new int[n + 1];
nqueens MyClass = new nqueens();
MyClass.queens(0);
Console.ReadLine();
}
}
برای تغییر در تعداد وزیر متغییر n را در تابع Main مقدار دهید.