حل مسئلهی N وزیر در سی شارپ
مسئلهی N وزیر یکی از مسائل کلاسیک در علوم کامپیوتر و الگوریتمها است. این مسئله به طور خاص به چیدمان N وزیر در یک صفحه شطرنج N در N میپردازد، به گونهای که هیچ دو وزیری نتوانند یکدیگر را تهدید کنند.
مبانی مسئله
در یک صفحه شطرنج، وزیر میتواند به صورت افقی، عمودی و قطری حرکت کند. بنابراین، چیدمان وزرا باید به گونهای باشد که هیچ دو وزیری در یک خط افقی، عمودی یا قطری قرار نگیرند.
الگوریتم حل مسئله
رایجترین روش برای حل این مسئله، استفاده از الگوریتمهای جستجوی بازگشتی است. در زیر مراحل اصلی این الگوریتم آورده شده است:
- ایجاد صفحه شطرنج: یک آرایه 2 بعدی برای نمایش صفحه شطرنج ایجاد کنید.
- جستجوی بازگشتی: یک تابع بازگشتی برای قرار دادن وزرا ایجاد کنید. این تابع در هر مرحله یک وزیر را در سطر مشخص قرار میدهد و سپس با سطر بعدی ادامه میدهد.
- بررسی تهدید: قبل از قرار دادن وزیر، بررسی کنید که آیا این چیدمان تهدیدی ایجاد میکند یا خیر. اگر تهدیدی وجود نداشت، به سطر بعدی بروید. در غیر این صورت، به عقب برگردید و سعی کنید وزیر را در موقعیت دیگری قرار دهید.
- پايان: اگر همه وزرا قرار گرفتند، یک راهحل یافتهاید و میتوانید آن را ذخیره کنید.
نمونه کد سی شارپ
```csharp
using System;
class NQueens
{
static int N = 8;
static int[,] board = new int[N, N];
static void Main()
{
SolveNQ(0);
PrintSolution();
}
static bool SolveNQ(int col)
{
if (col >= N)
return true;
for (int i = 0; i < N; i++)
{
if (IsSafe(i, col))
{
board[i, col] = 1;
if (SolveNQ(col + 1))
return true;
board[i, col] = 0; // backtrack
}
}
return false;
}
static bool IsSafe(int row, int col)
{
for (int i = 0; i < col; i++)
if (board[row, i] == 1)
return false;
for (int i = row, j = col; i >= 0 && j >= 0; i--, j--)
if (board[i, j] == 1)
return false;
for (int i = row, j = col; j >= 0 && i < N; i++, j--)
if (board[i, j] == 1)
return false;
return true;
}
static void PrintSolution()
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
Console.Write(board[i, j] + " ");
Console.WriteLine();
}
}
}
```
نتیجهگیری
حل مسئلهی N وزیر در سی شارپ با استفاده از الگوریتمهای بازگشتی میتواند به راحتی انجام شود. این مسئله نه تنها به یادگیری اصول الگوریتمها کمک میکند، بلکه درک عمیقتری از تفکر منطقی و حل مسئله را نیز فراهم میسازد. با اجرای این کد، میتوانید راهحلهای مختلف این مسئله را مشاهده کنید و به راحتی آنها را تغییر دهید یا بهینه کنید.