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

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

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

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

15.10.2010, 21:40. Просмотров 1520. Ответов 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;}   //непосредственный вывод
      //сохранение формата вывода
 
 
}

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

Заранее благодарен!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.10.2010, 21:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расстановка 8 ферзей (C++):

Расстановка восьми ферзей на шахматной доске так, чтобы ни один не угрожал другому - C++
5. Расстановка восьми ферзей на шахматной доске так, чтобы ни один не угрожал другому.

8 ферзей - C++
Здравствуйте. Пыталась реализовать задачу о 8 ферзях. Программа написана на С++. В принципе задача довольно распространенная - нужно...

задача n-ферзей - C++
Помогите пожалуйста с лабкой.. надо составить программу на С++ которая будет решать задачу n-ферзей.На доске nxn нужно разместить n...

восемь ферзей на билдере - C++
Нужно переделать из консольного текста в С++ builder ( то есть с модулями, интерфейсом) Задача о восьми ферзях: ...

«Расстановка кубиков» - C++
Программа играющая в игру «Расстановка кубиков». Игральный кубик можно перекатывать по клеткам поля n*m. Причём, если клетка имеет вес i,...

Расстановка кирпичей - C++
Сколькими способами можно замостить 3xn прямоугольник при помощи 2x1 доминошек? Ниже наведен пример замощения такими плитками...

2
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
15.10.2010, 23:07 #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. Во втором все элементы массива
1
ObiSan
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
16.10.2010, 12:52 #3
Если интересно, вот видео, где человек пишет и объясняет данную программу.
http://www.youtube.com/watch?v=bF5d0tiGiJA
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.10.2010, 12:52
Привет! Вот еще темы с ответами:

Перебор. Задача про ферзей. - C++
На шахматной доске требуется расставить 8 ферзей, что бы ни один ферзь не атаковал другого. Написал программу. Три дня писал). Что вы...

Расстановка знаков операций - C++
Не получается решить задачу,не могу понять в чем проблема.Вроде все правильно все выводит,но проваливает почти все тесты.Помогите найти в...

Расстановка знаков препинания - C++
По правилу расстановки знаков препинания перед каждым знаком препинания пробел отсутствует, а после него обязательно стоит пробел. Учитывая...

Расстановка игральных костей - C++
Программа играющая в игру «Расстановка игральных костей». Задана частичная двумерная сетка. В некоторых позициях сетки расставлены...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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