九皇后问题? 没搞错吧. 记得是8皇后问题呀...嘿嘿, 没错. 请看代码. (搞了几十分钟, 才弄出来, 几年前, 兰兰姐教得不错. 忘光了)
#include <iostream> int counts = 0; void print(int **array, int row, int line) { if (array == 0) { return ; } std::cout<< "-------------------" << std::endl; for (int i=0; i<row; ++i) { for (int j=0; j<line; ++j) { std::cout<< array[i][j] << " "; } std::cout<< std::endl; } std::cout<< "-------------------" << std::endl << std::endl; return ; } bool try_position(int **array, int row, int line, int x, int y) { for (int i=0; i<y; ++i) { if (array[i][x] == 1) { return false; } } for (int i=x-1, j=y-1; i>-1 && j>-1; i--, j--) { if (array[j][i] == 1) { return false; } } for (int i=x+1, j=y-1; i<line && j>-1; i++, j--) { if (array[j][i] == 1) { return false; } } return true; } void nine_queen(int **array, int row, int line, int n) { if (n == row) { counts ++; // print(array, row, line); return ; } for (int i=0; i<line; ++i) { if (try_position(array, row, line, i, n)) { array[n][i] = 1; nine_queen(array, row, line, n+1); array[n][i] = 0; } } return ; } int main(int argc, char* argv[]) { int n = 9; int **array = new int*[n]; for (int i=0; i<n; i++) { array[i] = new int[n]; memset(array[i], 0, sizeof(int) * n); } nine_queen(array, n, n, 0); std::cout<< counts << std::endl;
//差点忘delete[]了. 很久没写代码了呀.
for(int i=0; i<n; i++)
{
delete[] array[i];
}
delete[] array;
return 0; }

浙公网安备 33010602011771号