Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<iostream>
- using namespace std;
- /* Максимален размер на дъската */
- #define MAXN 100
- /* Размер на дъската */
- unsigned n, x, y; // + новите променливи за координатите на 1вата царица
- unsigned col[MAXN] , RD[2*MAXN - 1], // RD/LD десен/ляв диагонал
- LD[2*MAXN], queens [MAXN];
- bool repeat = true;
- /* Отпечатва намереното разположение на цариците */
- /*void printBoard()
- { unsigned i , j ;
- for (i = 0; i < n; i++) {
- printf("\n");
- for (j = 0; j < n; j++)
- if(queens[i] == j) printf("x ");
- else printf(". ");
- }
- printf("\n");
- exit(0);
- }*/
- /* Намира следваща позиция за поставяне на царица */
- void generate(unsigned i)
- { if( repeat ){
- if( i == n ) repeat = false;
- if( i == x ) generate(i + 1); // проверка ако сме на реда на 1вата дама - прескачаме реда
- unsigned k;
- for (k = 0; k <= n; k++) {
- if (col[k] && RD[i + k] && LD[n + i - k]) {
- col[k] = 0; RD[i + k] = 0; LD[n + i - k] = 0; queens[i] = k;
- generate(i + 1);
- col[k] = 1; RD[i + k] = 1; LD[n + i - k] = 1;
- }
- }
- }
- }
- int main(void) {
- while( cin >> n >> x >> y ){
- unsigned i;
- for (i = 0; i < n; i++) col[i] = 1;
- for (i = 0; i < (2*n - 1); i++) RD[i] = 1;
- for (i = 0; i < 2*n; i++) LD[i] = 1;
- x -= 1; // реални координати
- y -= 1; //
- col[y] = 0; RD[x + y] = 0; LD[n + x - y] = 0; queens[x] = y; // x -> ред y -> стълб n -> размер на дъската
- generate(0);
- if( queens[n-1]+1 > n ) cout << 0 << endl;
- else cout << queens[n-1]+1 << " " << n << endl;
- repeat = true;
- }
- return 0;
- }
- /*
- Задача 5а. [6.3.5, стр. 363, queens.c]
- Да се реши задачата за разполагане на n царици на обобщена шахматна дъска с размери n x n,
- като разположението на една от цариците е дадено предварително.
- Вход:
- На входа се задава числото n (n < 10) и координатите на дадената царица.
- Горният ляв ъгъл е с координати (1,1). Входът съдържа много примери на отделни редове.
- .
- Изход:
- За всеки пример на нов ред се отпечатват координатите на царицата,
- която се намира на последния (най-долу) ред на дъската. Ако разполагането е невъзможно се отпечатва числото 0.
- Пример:
- 8 1 1
- 2 1 1
- Решение на примера:
- 4 8
- 0
- */
Advertisement
Add Comment
Please, Sign In to add comment