Files
uni/ws2019/ipi/uebungen/cpp_headers/queens.cc
T

57 lines
1.2 KiB
C++

#include "fcpp.hh"
#include <string>
const int board_size = 8; // globale Konstante
typedef int columns[board_size]; // neuer Datentyp "columns"
bool good_position (int new_row, columns queen_cols, int new_col)
{
for (int row=0; row<new_row; row=row+1)
if ((queen_cols[row] == new_col) ||
(new_row-row == abs(queen_cols[row]-new_col)))
return false;
return true;
}
void display_board (columns queen_cols)
{
for (int i=0; i<board_size; i=i+1)
{
std::string s("");
for (int j=0; j<board_size; j=j+1)
if (j!= queen_cols[i])
s = s + ".";
else
s = s + "D";
print(s);
}
print(" ");
}
int queen_configs (int row, columns queen_cols)
{
if (row == board_size) {
display_board (queen_cols);
return 1;
}
else {
int nr_configs = 0;
for (int col=0; col<board_size; col=col+1)
if (good_position (row, queen_cols, col))
{
queen_cols[row] = col;
nr_configs = nr_configs +
queen_configs (row+1, queen_cols);
}
return nr_configs;
}
}
int main ()
{
columns queen_cols;
print("Anzahl Loesungen");
print(queen_configs(0,queen_cols));
return 0;
}