Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Подсолнух
1 / 1 / 0
Регистрация: 28.03.2010
Сообщений: 94
#1

Расстановка 8 ферзей - C++

15.10.2010, 21:40. Просмотров 1389. Ответов 2
Метки нет (Все метки)

Привет всем, слушайте, вот исходник на С++ задача <<о восьми ферзях>>:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include<iostream>
#include<cmath>
#include"pent"
void forming(int geo[12][25]);
void placing(int);
void print(int geo[12][25]);
int main()
{ //массив,в котором каждая строка,реализует представление 1 фигуры
  int   geometry[12][25]={1,1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
              1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
              0,1,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
              0,0,1,0,0,1,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
              1,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
              0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
              1,1,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
              1,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,
              1,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
              1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,
              1,1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
              0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  //структура 1 фигуры
  //прямоугольная область размещения фигур
  //(в дальнейшем поле расстановки) 6х10
  //clrscr();         //очистка экрана
  cout<<"beginning dates:"<<endl; //вывод начальных данных
  getch();        // ожидание нажатия клавишы
  //подпрограмма формирования массива фигур,
  //из начального массива geometry
 forming(geometry);
//  int kol=10; int kol2=0;short b=1;
 // int g=-33, h=48;
    //основная функция, выполняющая всевозможные расстановки фигур
     //на поле расстановки
  placing(1);
   //вывод данных(поле расстановки) на экран
  print(geometry);
  getch();
 //  b ? Print(kol,kol2) : Print(kol,pow(kol,2)+g);
 //  b ? Prrint(kol,kol2) : Prrint(kol,pow(kol,2)-h);
  return 0;
}
 
//подпрограмма формирования массива фигур,
//из начального массива geometry
void forming(int geo[12][25])
 { struct pents
    { int shape[5][5];//форма фигуры
      char located;   //находится на доске/не находится
 }  image[12];  //массив из 12 фигур
    int h;
 
    for(int i=1;i<=12;i++) //кол-во фигур
    { h=1;
      for(int j=1;j<=5;j++) //размерность каждой фигуры
       for(int k=1;k<=5;k++)
   //присвоение массиву форматов каждой фигуры,
   //значений из нгчальных данных
       { image[i].shape[j][k]=geo[i][h];
       h++;
       }
    }
    for(i=1;i<=12;i++)
   //пока ни одна фигура не ледит на поле расстановки,
   //поэтому значение "N"
       image[i].located='N';
}
//основная функция, выполняющая всевозможные расстановки фигур
//на поле расстановки
void placing(int i)       //i-номер фигуры
{ const static int n=6,m=10;
  struct pents
    { int shape[5][5];//форма фигуры
      char located;   //находится на доске/не находится
 }  image[12];  int field[n][m];
    //вспомогательные счётчики и
    //признак нахождения подходящего варианта
    int j1,h1,b;
     //цикл нахождения всевозможных вариантов для i-ой фигуры
    for(int j=1;j<=n;j++)
    { j1=j;
    //просматриваем каждый столбец j-ой строки
      for(int h=1;h<=m;h++)
      { h1=h;b=1;
    //циклы доступа к элементам массива формата каждой фигуры
        for(int k=1;k<=5;k++)
        { for(int l=1;l<=5;l++)
          //если сумма элементов массива формы i-ой фигуры
          //и элементов массива  поля расстановки больше 1
          //т.е. происходит наложение фигур друг на друга, то b присвоить значение 0
          { if (image[i].shape[k][l]+field[j1][h1]>1) b=0;
            h1++;
          }
          j1++;h1=h;
        }
        //если не разу не произошло наложение фигур, т.е. фигура подходит,
        //то выход из цикла поиска
        //т.е. из цикла возможных исходных позиции фигуры по столбцам
        if (b==1) break;
        j1=j;
      }
      if (b==1)
    //присваиваем полю расстановки подошедшую нам фигуру
      { for(int k=1;k<=5;k++)
         for(int l=1;l<=5;l++)
             if (image[i].shape[k][l]==1) field[-j+k][-l+h]=i;
    //поменяли признак находится на доске/не находится
        image[i].located='Y';
    //если это не случай с последней фигурой,
        //то рекурсией осуществляем установку след.фигуры
    if (i<12) placing(++i);
    //  else //иначе, т.е. если дошли до посл.фигуры(нашли 1 вариант), вывод на экран
      //           print();
        //обнуляем значения последней поставленной фигуры
        //на поле расстановеи  и ищем след.подходящий вариант
    for(k=j;k<=6;k++)
     for(int l=h;l<=10;l++) field[k][l]=0;
    //поменяли признак находится на доске/не находится
    image[i].located='N';
      }
    }   //выполняем всё вышесказанное для каждой фигуры,
        //устонавливая её,находя подходящий вариант и
        //удаления для последущего поиска других вариантов
 
}
//вывод данных(поле расстановки) на экран
void print(int geo[12][25])
{
 for(int i=1;i<12;i++){
   for(int j=1;j<25;j++) //координаты поля расстановки
       cout<<geo[i][j];
       cout<<endl;}   //непосредственный вывод
      //сохранение формата вывода
 
 
}

Мне задали её в виде курсовой, код написал, честно, не сам, помогали, но запустить не получается, помогите разобраться в чем дело.

Заранее благодарен!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2010, 21:40     Расстановка 8 ферзей
Посмотрите здесь:

8 ферзей C++
C++ Расстановка знаков препинания
восемь ферзей на билдере C++
Расстановка игральных костей C++
«Расстановка кубиков» C++
Перебор. Задача про ферзей. C++
задача n-ферзей C++
C++ Расстановка кирпичей
Расстановка html тегов в тексте C++
Расстановка кораблей (морской бой) C++
Расстановка знаков операций C++
Расстановка восьми ферзей на шахматной доске так, чтобы ни один не угрожал другому C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
15.10.2010, 23:07     Расстановка 8 ферзей #2
Подсолнух, Индексы массивов в С/С++ начинаются с нуля...

C++
1
2
3
4
5
6
7
8
9
int Arr[5];
//Заполнили
for(int i=1; i<5; ++i)
   std::cout<<Arr[i]<<' ';
 
int Arr[5];
//Заполнили
for(int i=0; i<5; ++i)
   std::cout<<Arr[i]<<' ';
В первом случае выведутся элементы кроме 1. Во втором все элементы массива
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
16.10.2010, 12:52     Расстановка 8 ферзей #3
Если интересно, вот видео, где человек пишет и объясняет данную программу.
http://www.youtube.com/watch?v=bF5d0tiGiJA
Yandex
Объявления
16.10.2010, 12:52     Расстановка 8 ферзей
Ответ Создать тему
Опции темы

Текущее время: 19:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru