C# :: Aufgabe #96 :: Lösung #1
3 Lösungen

#96
Das Damenproblem (Teil II)
Fortgeschrittener - C#
von ElPapito
- 07.05.2015 um 11:45 Uhr
Das verallgemeinerte Damenproblem besteht aus einem nxn Schachfeld und n Damen.
Die Aufgabe besteht darin die n Damen so zu positionieren, dass sie sich gegenseitig nicht bedrohen, d.h. es dürfen keine zwei Damen in der gleichen Zeile/Spalte/Diagonale stehen.
Schreibe ein kleines Programm, welches für n = 1, ..., 13 ausgibt wie viele Lösungen existieren.
Die Aufgabe besteht darin die n Damen so zu positionieren, dass sie sich gegenseitig nicht bedrohen, d.h. es dürfen keine zwei Damen in der gleichen Zeile/Spalte/Diagonale stehen.
Schreibe ein kleines Programm, welches für n = 1, ..., 13 ausgibt wie viele Lösungen existieren.
#1

von eulerscheZhl (5230 Punkte)
- 08.05.2015 um 16:10 Uhr

using System; namespace trainYourProgrammer { class MainClass { static long PlaceQueens(int n, bool[,] blocked, int line) { if (line == n) return 1; long result = 0; for (int i = 0; i < n; i++) { if (blocked [i, line]) continue; result += PlaceQueens (n, PlaceQueenAt (i, line, n, blocked), line + 1); } return result; } static long PlaceQueens(int n) { bool[,] blocked = new bool[n, n]; long result = 0; for (int i = 0; i < n/2; i++) { //Ausnutzen der Symmetrie result += 2 * PlaceQueens (n, PlaceQueenAt (i, 0, n, blocked), 1); } if (n % 2 == 1) result += PlaceQueens (n, PlaceQueenAt (n / 2, 0, n, blocked), 1); return result; } static bool[,] PlaceQueenAt(int x, int y, int n, bool[,] blocked) { int[,] offset = {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; bool[,] result = (bool[,]) blocked.Clone(); for(int dir = 0; dir < 8; dir++) { int x_ = x + offset[dir, 0]; int y_ = y + offset[dir, 1]; while (x_ >= 0 && x_ < n && y_ >= 0 && y_ < n) { result[x_, y_] = true; x_ += offset[dir, 0]; y_ += offset[dir, 1]; } } return result; } static void Main(string[] args) { for (int i = 1; i < 14; i++) { Console.WriteLine ("n = " + i.ToString().PadLeft(2) + ": " + PlaceQueens(i).ToString().PadLeft(6) + " Möglichkeiten"); } } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1