unsuccessful try to fix ndame.cpp :-(
This commit is contained in:
parent
00f94b6766
commit
af10831744
1 changed files with 42 additions and 29 deletions
|
@ -1,7 +1,7 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
|
||||||
//#define DEBUG
|
#define DEBUG
|
||||||
|
|
||||||
#include "ndame.h"
|
#include "ndame.h"
|
||||||
|
|
||||||
|
@ -20,6 +20,10 @@ NDame::NDame(int n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NDame::Run() {
|
void NDame::Run() {
|
||||||
|
#ifdef DEBUG
|
||||||
|
int sol_count = 0;
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
while (row < n) {
|
while (row < n) {
|
||||||
while (col < n) {
|
while (col < n) {
|
||||||
if (Check(row, col) && col > set[row]) {
|
if (Check(row, col) && col > set[row]) {
|
||||||
|
@ -39,21 +43,24 @@ void NDame::Run() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (col == n) {
|
if (col == n) {
|
||||||
if (set[row - 1] >= n -1 && row == 0)
|
if (set[row - 1] >= n-1 && row == 0) {
|
||||||
break;
|
break;
|
||||||
else
|
}
|
||||||
|
else {
|
||||||
Backtrack();
|
Backtrack();
|
||||||
} else {
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
row++;
|
row++;
|
||||||
col = 0;
|
col = 0;
|
||||||
|
|
||||||
if (row == n) {
|
if (row == n) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
std::cout << "New Solution: Nr. " << sol_count << std::endl;
|
std::cout << "New Solution: Nr. " << sol_count++ << std::endl;
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
|
||||||
solutions.push_back(set);
|
solutions.push_back(set);
|
||||||
Backtrack();
|
Backtrack();
|
||||||
}
|
}
|
||||||
|
@ -66,6 +73,21 @@ void NDame::Run() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NDame::Backtrack() {
|
||||||
|
#ifdef DEBUG
|
||||||
|
std::cout << "Backtrack: we will reject dame " << row - 1 << "|" << set[row - 1] << std::endl;
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
col = set[row - 1] + 1;
|
||||||
|
UnSet(row - 1, set[row - 1]);
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
Show(&set);
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
row--;
|
||||||
|
}
|
||||||
|
|
||||||
bool NDame::Check(int row, int col) {
|
bool NDame::Check(int row, int col) {
|
||||||
bool check;
|
bool check;
|
||||||
check = (locked[row][col] > 0) ? false : true;
|
check = (locked[row][col] > 0) ? false : true;
|
||||||
|
@ -140,16 +162,23 @@ void NDame::Show(const std::vector<int> *p) {
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
if (argc >= 2) {
|
if (argc >= 2) {
|
||||||
//std::cout << "Berechne das n-Damenproblem für " << argv[1] << " Damen" << std::endl;
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
std::cout << "Berechne das n-Damenproblem für " << argv[1] << " Damen" << std::endl;
|
||||||
|
#endif /* DEBUG */
|
||||||
|
|
||||||
NDame dame(atoi(argv[1]));
|
NDame dame(atoi(argv[1]));
|
||||||
dame.Run();
|
dame.Run();
|
||||||
|
|
||||||
dame.ShowSolutions();
|
dame.ShowSolutions();
|
||||||
|
|
||||||
//std::cout << dame.solutions.size() << " Lösungen" << std::endl;
|
#ifdef DEBUG
|
||||||
|
std::cout << dame.solutions.size() << " Lösungen" << std::endl;
|
||||||
if (argc == 3)
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
if (argc == 3) {
|
||||||
dame.Show(&dame.solutions.at(atoi(argv[2]) - 1));
|
dame.Show(&dame.solutions.at(atoi(argv[2]) - 1));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Bitte geben Sie einen Paramenter an!" << std::endl;
|
std::cout << "Bitte geben Sie einen Paramenter an!" << std::endl;
|
||||||
}
|
}
|
||||||
|
@ -164,19 +193,3 @@ void NDame::ShowSolutions() {
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void NDame::Backtrack() {
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
std::cout << "Backtrack: we will reject dame " << row - 1 << "|" << set[row - 1] << std::endl;
|
|
||||||
#endif /* DEBUG */
|
|
||||||
|
|
||||||
col = set[row - 1] + 1;
|
|
||||||
UnSet(row - 1, set[row - 1]);
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
Show(&set);
|
|
||||||
#endif /* DEBUG */
|
|
||||||
|
|
||||||
row--;
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue