# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها >  یک توضیح مختصر در مورد کدهای پروزه "هشت وزیر"

## leontry89

دوستان می خواستم یک توضیح مختصر در مورد این کدهای هوش مصنوعی که برای پروژه هوش مصنوعی هست بدید. ممنون میشم.
using System;
using System.Collections.Generic;
using System.Text;

namespace NQueens.HelperClasses
{
    public class Queen
    {
        // در صورت نیاز برای محاسبه ی تعداد حالات بیشتر می توان این مقدار را افزایش داد
        // اما زمان اجرای آن طولانی تر می شود
        public static readonly int MaxOfStates = 200;  

        private int N = 0, row = 0;
        private int col = 0;
        private int[] queensPosition;
        private int[,] queensWorld;

        private int _goalIndex;
        public int GoalIndex
        {
            get
            {
                return _goalIndex;
            }
        }


        //Constructor = سازنده
        public Queen(int n)
        {
            queensPosition = new int[n];
            for (int i = 0; i < n; i++)
                queensPosition[i] = -1;
            queensWorld = new int[n, n];
            N = n;
            _goalIndex = 0;

        }



        //-------- Method -----------------------------------

        public void GoalPosition(ref int[,] goalArray)
        {
            int i = 0;
            do
            {
                row = queensPosition[col];
                if (row >= 0)
                    ResetQueensWorld(row);
                while (++row < N)
                {
                    if (!Attack(row, col))
                    {
                        queensPosition[col] = row;
                        SetQueensWorld(row);
                        col++;
                        if (col == N)
                        {
                            col--;
                            for (i = 0; i < N; i++)
                                goalArray[_goalIndex, i] = queensPosition[i];
                            _goalIndex++;
                            ResetQueensWorld(row);
                            queensPosition[col] = -1;
                            col--;
                        }
                        break;
                    }
                }
                if (row == N)
                {
                    queensPosition[col] = -1;
                    col--;
                }
                if (GoalIndex >= MaxOfStates)
                    break;
            } while (col >= 0);

        }

        public bool Attack(int row, int column)
        {
            int value = 0;
            value = queensWorld[row, column];
            if (value == 0)
                return false;
            else
                return true;
        }

        public void SetQueensWorld(int newRow)
        {
            int i, j, min;

            //-------------- {-} ------------------
            i = newRow;
            j = 0;
            while (j < N)
            {
                queensWorld[i, j] += col + 1;
                j++;
            }
            //-------------- {|} ------------------
            i = 0;
            j = col;
            while (i < N)
            {
                queensWorld[i, j] += col + 1;
                i++;
            }
            //------------- {\} -------------------             
            min = newRow;
            if (col < newRow)
                min = col;
            i = newRow - min;
            j = col - min;
            while (i < N && j < N)
            {
                queensWorld[i, j] += col + 1;
                i++;
                j++;
            }
            //----------- {/} ---------------------   
            min = newRow;
            int eslash = N - col - 1;
            if (eslash < min)
                min = eslash;
            i = newRow - min;
            j = col + min;
            while (i < N && j >= 0)
            {
                queensWorld[i, j] += col + 1;
                i++;
                j--;
            }
        } 

        public void ResetQueensWorld(int oldRow)
        {
            int i, j, min;

            //-------------- {-} ------------------
            i = oldRow;
            j = 0;
            while (j < N)
            {
                queensWorld[i, j] -= col + 1;
                j++;
            }
            //-------------- {|} ------------------
            i = 0;
            j = col;
            while (i < N)
            {
                queensWorld[i, j] -= col + 1;
                i++;
            }
            //------------- {\} -------------------             
            min = oldRow;
            if (col < oldRow)
                min = col;
            i = oldRow - min;
            j = col - min;
            while (i < N && j < N)
            {
                queensWorld[i, j] -= col + 1;
                i++;
                j++;
            }
            //---------------- {/} ----------------  
            min = oldRow;
            int eslash = N - col - 1;
            if (eslash < min)
                min = eslash;
            i = oldRow - min;
            j = col + min;
            while (i < N && j >= 0)
            {
                queensWorld[i, j] -= col + 1;
                i++;
                j--;
            }
        }
    }
}

----------

