Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

не выводится решение задачи

1.9K
04 октября
alexandrv
39 / / 21.01.2010
Здравствуйте! Подскажите, пожалуйста, в чем ошибка алгоритма полного перебора с возвратом задачи о 8 ферзях?
Код:
namespace _8_ferzy
{
    class Program
    {
        static void Vivod(int[] mas1, int[] mas2)
        {
            for (int i=1;i<9; i++)
            { Console.WriteLine(mas1[i]+" "+mas2[i]); }
        }
        static bool Proverka(int[] mas1,int[] mas2, int ii)
        {
           bool g = true;
           for (int p=1;p<=ii-1;p++)
            {
       
                if (mas1[p] == mas1[ii] || mas2[p] == mas2[ii] || Math.Abs(mas1[p] - mas1[ii]) == Math.Abs(mas2[p] - mas2[ii]))
                 { g = false; break; }
 
            }
             return g;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Задайте размеры доски:");
            Console.Write("количество вертикалей А=");
            int A = Convert.ToInt16(Console.ReadLine());
            Console.Write("количество горизонталей B=");
            int B = Convert.ToInt16(Console.ReadLine());
            Console.Write("количество ферзей N=");
            int N = Convert.ToInt16(Console.ReadLine());
           
            int M = A * B; // количество клеток доски  (количество номеров вариантов)
           
            int k =0;     // количество вариантов
 
             int[] x = new int[N+1];  // для фиксации положений (координат) ферзей 2 массива
             int[] y = new int[N+1];
         
         
 
 
           int i = 0; // номер ферзя которому ищется место
      link11: i = i + 1;
             int j = 0;
             if (i > N) { k++; Console.WriteLine("Вывод решения"); Vivod(x,y);Console.ReadKey(); }
     link14: j = j + 1;
             if (i == 1)
             {
                 
                 x[i] = 1; y[i] = 1;
 
            }
             else
             {
                 x[i] = x[i - 1]; y[i] = y[i-1];
            }
   //   link1:
            if (j > M) { Console.WriteLine("Ход назад"); goto link27; }
             if (y[i]<B)
             {
                y[i] = y[i] + 1;
            }
             else
             {
                y[i] = 1; x[i] = x[i] + 1;
            }
           
 
            if (Proverka(x,y,i) == false) goto link14;
 
            goto link11;
 
        link27: i = i - 1;
            if (i == 0) { System.Environment.Exit(0); }
 
 
            Console.ReadKey();
 
        }
    }
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог