优秀品牌网站案例分析,凡科做网站行吗,长沙百度seo,可以通过哪些网站注册域名题目 会下国际象棋的人都很清楚#xff1a;皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上#xff08;有8 * 8个方格#xff09;#xff0c;使它们谁也不能被吃掉#xff01;这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上有8 * 8个方格使它们谁也不能被吃掉这就是著名的八皇后问题。 对于某个满足要求的8皇后的摆放方法定义一个皇后串a与之对应即ab1b2…b8其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解即92个不同的皇后串。 给出一个数b要求输出第b个串。串的比较是这样的皇后串x置于皇后串y之前当且仅当将x视为整数时比y小。 输入 第1行是测试数据的组数n后面跟着n行输入。每组测试数据占1行包括一个正整数b(1 b 92) 输出 输出有n行每行输出对应一个输入。输出应是一个正整数是对应于b的皇后串。 样例输入 2 1 92 样例输出 15863724 84136275
//错误代码按题目要求ab1b2...b8其中bi为相应摆法中第i行皇后所处的列数。
#include iostream
using namespace std;
//用来存储方案 ,下标都是从1开始
int a[9][9];
int visRow[9]; //行
int visLeftIncline[17];//左斜线 使用的时候 rowcolumn
int visRightIncline[16]; //右斜线使用的时候row-column8
int ansCount0;
int b[93][10];void print(){ansCount;for(int i1;i8;i){for(int j1;j8;j){if(a[i][j]1){b[ansCount][i]j;break; } }}} void search(int column){if(column8){//if(ansCount5) return;print();//cout ansCountendl;}else{for(int row1;row8;row){if(!visRow[row]!visLeftIncline[rowcolumn]!visRightIncline[row-column8]){visRow[row]1;visLeftIncline[rowcolumn]1;visRightIncline[row-column8]1;a[row][column]1;search(column1);//找下一列//回溯 visRow[row]0;visLeftIncline[rowcolumn]0;visRightIncline[row-column8]0;a[row][column]0; }}}
}int main(){search(1);int n,aww;cinn;for(int i0;in;i){cinaww;for(int j1;j8;j){coutb[aww][j];}coutendl;} return 0;
}
//ac代码
//明明是从第一列到第八列的行数的组合题目绝对有问题
#include iostream
using namespace std;
//用来存储方案 ,下标都是从1开始
int a[93][9];
int visRow[9]; //行
int visLeftIncline[17];//左斜线 使用的时候 rowcolumn
int visRightIncline[16]; //右斜线使用的时候row-column8
int ansCount1;void init(){}void print(){int case1;cincase1;int detailCase;while(case1--){cindetailCase;for(int i1;i8;i){couta[detailCase][i];}coutendl;}} void search(int column){if(column8){ansCount; //因为是树形结构所以下面的解要用到前面的解//因为是直接从中间开始所以前面的值直接用 ansCount-1填//for(int i1;i8;i){a[ansCount][i]a[ansCount-1][i];}}else{for(int row1;row8;row){if(!visRow[row]!visLeftIncline[rowcolumn]!visRightIncline[row-column8]){visRow[row]1;visLeftIncline[rowcolumn]1;visRightIncline[row-column8]1;a[ansCount][column]row;//记录这一列是在第几行search(column1);//找下一列//回溯 visRow[row]0;visLeftIncline[rowcolumn]0;visRightIncline[row-column8]0;}}}
}int main(){init(); search(1);print();return 0;
}