نمونه سورس کد حل مسئله N-Queen توسط DFS و BFS و نمایش آن در سی شارپ
برای دانلود نمونه سورس کد حل مسئله N-Queen توسط DFS و BFS و نمایش آن در سی شارپ به لینک زیر بروید
📥 برای دانلود اینجا کلیک فرماییدتحلیل کامل و جامع درباره نمونه سورس کد حل مسئله N-Queen با استفاده از الگوریتمهای DFS و BFS در زبان سیشارپ
---
مقدمه
در دنیای الگوریتمها و برنامهنویسی، یکی از مسائل کلاسیک و در عین حال چالشی، مسئله N-Queen یا همان «مسئله پادشاهیهای N» است. این مسئله، نه تنها به عنوان یک تمرین برای تقویت مهارتهای برنامهنویسی بلکه به عنوان نمونهای از کاربردهای الگوریتمهای جستجو و بهخصوص روشهای مبتنی بر جستجوی عمقی (DFS) و جستجوی عرضی (BFS) مورد استفاده قرار میگیرد. هدف اصلی در این مسئله، قرار دادن N شاهین در یک صفحه شطرنج N×N است، به طوری که هیچ دو شاهین نتوانند یکدیگر را تهدید کنند. در این حالت، هر شاهین باید در موقعیتی قرار گیرد که هیچ شاهین دیگری در همان ردیف، ستون یا قطر قرار نگیرد.
در ادامه، این مقاله به صورت کامل و جامع، به شرح مفصل و دقیق نمونه سورس کد حل مسئله N-Queen با استفاده از الگوریتمهای DFS و BFS در زبان برنامهنویسی سیشارپ میپردازد. همچنین، نمایش نتایج و نحوهٔ نمایش گرافیکی این الگوریتمها را نیز مورد بررسی قرار میدهیم.
---
الگوریتم DFS و BFS در مسئله N-Queen
قبل از شروع به مروری بر کد، لازم است تفاوت و کاربردهای هر دو الگوریتم را مرور کنیم. الگوریتم جستجوی عمقی (DFS) بر پایه استک عمل میکند؛ یعنی به صورت عمیق در هر شاخه پیش میرود، تا زمانی که به یک حالت نهایی برسد یا شاخهای پایان یابد. در مقابل، الگوریتم جستجوی عرضی (BFS) از صف استفاده میکند و در هر سطح، تمام حالتهای ممکن را بررسی مینماید، و سپس به سطح بعدی میرود.
در حل مسئله N-Queen، هر حالت، یک وضعیت قرارگیری شاهینها است. در DFS، به صورت بازگشتی، هر بار یک ستون یا ردیف را انتخاب میکنیم و سعی میکنیم در صورت نبود تداخل، شاهین قرار دهیم. اگر این مسیر منجر به راهحل شد، ادامه میدهیم؛ در غیر این صورت، backtracking انجام میشود. در BFS، وضعیتهای مختلف در هر سطح تولید میشوند و پس از بررسی، به سطح بعدی منتقل میشوند، تا در نهایت، راهحلهای کامل پیدا شوند.
---
کد نمونه در سیشارپ
در ادامه، نمونه کد حل مسئله N-Queen با استفاده از هر دو روش و نمایش نتایج آورده شده است. این کد، قابلیت نمایش وضعیت صفحه شطرنج، در قالب آرایههای دو بعدی دارد، و همچنین، نتایج را به صورت گرافیکی یا متنی نمایش میدهد.
قسمت اول: تعریف کلاس و ساختارهای مورد نیاز
csharp
using System;
using System.Collections.Generic;
namespace NQueenSolver
{
class Program
{
static int N; // اندازه صفحه شطرنج
static int[,] board; // صفحه شطرنج
static List solutions; // لیست راهحلها
static void Main(string[] args)
{
Console.WriteLine("Enter the size of the board (N):");
N = int.Parse(Console.ReadLine());
board = new int[N, N];
solutions = new List();
// حل با استفاده از DFS
Console.WriteLine("\nSolving with DFS...");
SolveNQueensDFS(0);
Console.WriteLine($"Total solutions found (DFS): {solutions.Count}");
DisplaySolutions();
// حل با استفاده از BFS
Console.WriteLine("\nSolving with BFS...");
SolveNQueensBFS();
Console.WriteLine($"Total solutions found (BFS): {solutions.Count}");
DisplaySolutions();
}
...
}
}
در این قسمت، ما یک کلاس بزرگ داریم که اندازه صفحه را از کاربر میگیریم و دو لیست برای نگهداری راهحلها تعریف میکنیم. حالا، به شرح توابع حل مسئله میپردازیم.
---
قسمت دوم: حل مسئله با الگوریتم DFS
در روش DFS، از ساختار بازگشتی استفاده میکنیم. در هر فراخوانی، یک ردیف خاص را انتخاب میکنیم و در هر ستون، تلاش میکنیم شاهین قرار دهیم.
csharp
static void SolveNQueensDFS(int row)
{
if (row == N)
{
SaveSolution();
return;
}
for (int col = 0; col < N; col++)
{
if (IsSafe(row, col))
{
board[row, col] = 1; // قرار دادن شاهین
SolveNQueensDFS(row + 1);
board[row, col] = 0; // backtracking
}
}
}
توابع کمکی، مانند IsSafe، برای بررسی تداخل را پیادهسازی میکنیم.
c... ← ادامه مطلب در magicfile.ir
برای دانلود کرد به سایت اصلی بروید دانلود از لینک زیر می باشد
📥 برای دانلود اینجا کلیک فرمایید