N皇后
来源:互联网 发布:mac 7z解压软件 编辑:程序博客网 时间:2024/04/27 23:48
在N*N格的棋盘上放置N个皇后,任何两个皇后不放在同一行或同一列或同一斜线上。
需要注意的是,如图中上面两个矩阵中大于0的那些数据,它们表示此处有几个皇后可以攻击到,如果移走一个皇后,那么她的攻击范围内的危险值减一。
#include <stdio.h>#define QUEEN -1#define SAFETY 0#define MOVEDANGER -1#define DANGER 1#define PLACEQUEEN -1#define TAKEQUEEN 0int chessboard[20][20];void InitChessboard(int size){int i, j;for (i = 0; i < size; i++){for (j = 0; j < size; j++){chessboard[i][j] = SAFETY;}}}void MarkChessboard(int content, int row, int column, int size){int left, right;if (content == PLACEQUEEN){chessboard[row][column] = PLACEQUEEN;content = DANGER;}else{chessboard[row][column] = TAKEQUEEN;content = MOVEDANGER;}for (row++, left = column-1, right = column+1; row < size; row++){chessboard[row][column] += content;if (left >= 0){chessboard[row][left--] += content;}if (right < size){chessboard[row][right++] += content;}}}bool Backtrack(int queen, int queenNum){int column;if (queen == queenNum){return true;}for (column = 0; column < queenNum; column++){if (chessboard[queen][column] == SAFETY){MarkChessboard(PLACEQUEEN, queen, column, queenNum);for (int i = 0; i < queenNum; i++){for (int j = 0; j < queenNum; j++){printf(" %d", chessboard[i][j]);}printf("\n");}printf("\n");if (Backtrack(queen+1, queenNum)){return true;}else{MarkChessboard(TAKEQUEEN, queen, column, queenNum);}}}return false;}void DrawChessboard(int size, char left[3], char mid[3], char right[3]){int i;printf("%s", left);for (i = 1; i < size; i++){printf("━");printf("%s", mid);}printf("━");printf("%s\n", right);}void DisplayChessboard(int size){int i, j;DrawChessboard(size, "┏", "┳", "┓");for (i = 0; i < size; i++){printf("┃");for (j = 0; j < size; j++){if (chessboard[i][j] == QUEEN){printf("★┃");}else{printf(" ┃");}}printf("\n");if (i != size-1){DrawChessboard(size, "┣", "╋", "┫");}else{DrawChessboard(size, "┗", "┻", "┛");}}}int main(){int testNum, queenNum;scanf("%d", &testNum);while (testNum-- != 0){scanf("%d", &queenNum);InitChessboard(queenNum);if (Backtrack(0, queenNum)){DisplayChessboard(queenNum);}else{printf("Infeasible!\n");}}return 0;}
- n皇后
- N皇后
- N 皇后
- n皇后
- n皇后
- N皇后
- N皇后
- n皇后
- n 皇后
- N皇后
- N皇后
- N皇后
- N皇后
- n皇后
- N皇后
- N皇后
- N皇后
- N皇后
- GoogleTV用户接口开发
- Linux下安装过程中编译PHP时报错:configure: error: libjpeg.(a|so) not found
- 代码管理工具
- c++前景探究
- GoogleTV 设计模式
- N皇后
- android textview
- 栈的基本构造
- 6410串口配置
- poj3370
- Linux网络协议栈 -- socket connect 发起连接请求
- 那些年我们一起追的风车...
- 降级论(degrading-for-success)
- HDU 3535 AreYouBusy 综合背包