最后,附带一个求N皇后的全部解的程序。 #include #define N 8 int layout[N];//布局 int key = 0; int judge(int row, int col)//判定能否在(row,col)放下 { int i; for (i = 0; i < row; i++) { if (layout[i] == col) return 0;//同一列 if (i - layout[i] == row - col) return 0;//同一条主对角线 if (i + layout[i] == row + col) return 0;//同一条副对角线 } return 1; }
void lay(int row)//在row行上放Queen { int i; if (row == N)//放完N个Queen输出布局 { PRintf("%02d ", ++key); for (i = 0; i < N; i++) printf("%c%d ", layout[i] + 'a', i + 1); } else { for (i = 0; i < N; i++)//在i列上放Queen { layout[row] = i; if (judge(row, i)) lay(row + 1); } } }