2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 с++ перебор с возвратом
Сообщение17.12.2012, 18:30 
Собственно вот задача:

Получить все расстановки восьми ладей на шахматной доске, при которых
ни одна ладья не угрожает другой.

моя попытка решения:
Код:
#include<iostream>
using namespace std;
const int size = 8;
void searchpos (int [],int,int &);
bool searchrep (int [],int,int);
void main()
{
   int pos[size],i = 0,p = 0;
   searchpos(pos,p,i);
   cout << i << endl;
   system("pause");
}
void searchpos(int a[],int p,int &i)
{
   for (int j = 0;j < size;j++)
      if (searchrep(a,j,p))
      {
         a[p] = j;
         searchpos (a,p+1,i);
      }
      else
         if (p == size - 1)
            i++;
}
bool searchrep(int a[],int i,int p)
{
   for (int j = 0;j < p;j++)
      if (a[j] == i)
         return 0;
   return 1;
}


Проблема в том, что ответ выводится в семь раз больший, чем нужно. Помогите, пожалуйста, разобраться.

 
 
 
 Re: с++ перебор с возвратом
Сообщение17.12.2012, 18:53 
А сколько именно выводит?

 
 
 
 Re: с++ перебор с возвратом
Сообщение17.12.2012, 18:56 
venco в сообщении #659814 писал(а):
А сколько именно выводит?


282240

-- 17.12.2012, 18:53 --

Сам разобрался. Забыл наложить условие на конец цикла перед инкриментом.

 
 
 
 Re: с++ перебор с возвратом
Сообщение17.12.2012, 20:10 

(Оффтоп)

А можно спросить, почему вы так непоследовательно на пробелах экономили и зачем вам тип bool, если вы его значения true и false не используете?

 
 
 [ Сообщений: 4 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group