По-моему, нет. Во первых - я только что освежил в памяти, написал программку. Решений, если не искать повороты/отражения - 92. Если искать (я малость усложнил программку, чтоб искала) - то тогда находится 12, вроде как все они существенно различны. Кто хочет проверить: вот текст программы (без комментариев, но это неважно - надо только запустить):
package samples;
import java.io.PrintStream;
import java.util.ArrayList;
public class EightQueens {
static final int SIZE=8;
int currentSolution[] = new int[SIZE];
ArrayList<int[]> solutions = new ArrayList<int[]>();
private boolean horz[] = new boolean[SIZE];
private boolean verts[] = new boolean[SIZE];
private boolean diags[] = new boolean[2*SIZE-1];
private boolean diags2[] = new boolean[2*SIZE-1];
boolean doQueen(int x, int y) {
if (!(horz[x] || verts[y] || diags[y - x + (SIZE-1)] || diags2[y + x])) {
horz[x] = true;
verts[y] = true;
diags[y - x + (SIZE-1)] = true;
diags2[y + x] = true;
return true;
}
return false;
}
boolean equalsTo(int anotherSolution[]) {
for(int i=0;i<currentSolution.length;i++) {
if(currentSolution[i]!=anotherSolution[i])
return false;
}
return true;
}
int [] rotate(int board[]) {
int newboard[]=new int[SIZE];
for(int i=0;i<SIZE;i++) {
newboard[SIZE-board[i]-1]=i;
}
return newboard;
}
int [] mirrorHoriz(int board[]) {
int newboard[]=new int[SIZE];
for(int i=0;i<SIZE;i++) {
newboard[i]=SIZE-board[i]-1;
}
return newboard;
}
int [] mirrorVert(int board[]) {
int newboard[]=new int[SIZE];
for(int i=0;i<SIZE;i++) {
newboard[SIZE-i-1]=board[i];
}
return newboard;
}
int [] mirrorCenter(int board[]) {
int newboard[]=new int[SIZE];
for(int i=0;i<SIZE;i++) {
newboard[SIZE-i-1]=SIZE-board[i]-1;
}
return newboard;
}
void undoQueen(int x, int y) {
horz[x] = false;
verts[y] = false;
diags[y - x + (SIZE-1)] = false;
diags2[y + x] = false;
}
boolean tryMirror(int res[]) {
int temp[]=mirrorVert(res);
if(equalsTo(temp))
return true;
temp=mirrorHoriz(temp);
if(equalsTo(temp))
return true;
temp=mirrorVert(temp);
if(equalsTo(temp))
return true;
if(equalsTo(mirrorCenter(res)))
return true;
return false;
}
boolean alreadyHave() {
for(int [] res:solutions) {
if(equalsTo(res))
return true;
if(tryMirror(res))
return true;
int rotate[]=rotate(res);
if(equalsTo(rotate))
return true;
if(tryMirror(rotate))
return true;
if(equalsTo(rotate=rotate(rotate)))
return true;
if(tryMirror(rotate))
return true;
if(equalsTo(rotate=rotate(rotate)))
return true;
if(tryMirror(rotate))
return true;
}
return false;
}
void arrange(int y) {
if (y == SIZE) {
if(! alreadyHave())
solutions.add(currentSolution.clone());
} else {
for (int x = 0; x < SIZE; x++) {
if (doQueen(x, y)) {
currentSolution[y] = x;
arrange(y + 1);
undoQueen(x, y);
}
}
}
}
void printLine(int numspaces) {
for (int i = 0; i < numspaces; i++)
out.print(" ");
out.println("FF");
}
public void printSolution(int solution[]) {
out.print(" ");
for (int i = 0; i < SIZE; i++)
out.print("--");
out.println();
for (int i = 0; i < solution.length; i++) {
out.print("" + (SIZE - i) + " ");
printLine(solution[i]);
}
out.print(" ");
int ch='A';
for(int i=0;i<SIZE;i++) {
out.print(" ");
out.print((char)(ch+i));
}
out.println();
out.print(" ");
for (int i = 0; i < SIZE; i++)
out.print("--");
out.println();
}
public void print() {
int count = 1;
out.println("Found:" + solutions.size() + " solutions.\n");
for (int res[] : solutions) {
out.println("\nSolution " + (count++));
printSolution(res);
}
}
out = str;
out.print("Searching for solutions...");
arrange(0);
out.println("done!");
}
public static void main
(String args
[]) {
(new EightQueens
(System.
out)).
print();
}
}
А вот тут: найденные решения. Посмотрите, может я чего пропустил и есть какие-то производные друг от друга решения.
Searching for solutions...done!
Found:12 solutions.
Solution 1
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 2
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 3
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 4
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 5
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 6
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 7
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 8
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 9
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 10
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 11
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------
Solution 12
----------------
8 FF
7 FF
6 FF
5 FF
4 FF
3 FF
2 FF
1 FF
A B C D E F G H
----------------