(1)八皇后及N皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。
请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题。
====
package queen;
public class Queen{
static final int QUEEN_MAX = 8; // 皇后的数量
int[][] Queencount = new int[QUEEN_MAX][QUEEN_MAX];// 分配8X8的数组,充当棋盘,存放皇后
int resultCount = 0;// 记录皇后的放置方法的总数
int[] Queenplace = new int[QUEEN_MAX];// 存放每行的皇后位置即第column行的皇后放置位置是Queenplace[column]
<span style="white-space:pre"> </span>public void putQueen(int Rows){
int row = Rows;// 行标
for (int column = 0; column < QUEEN_MAX; column++){
if (Queencount[row][column] == 0){
for (int rowi = row + 1; rowi < QUEEN_MAX; rowi++){
Queencount[rowi][column]++;
if (column - rowi + row >= 0){
Queencount[rowi][column - rowi + row]++;
}
if (column + rowi - row < QUEEN_MAX){
Queencount[rowi][column + rowi - row]++;
}
} //
Queenplace[row] = column;// row行column列放了皇后
if (row == QUEEN_MAX - 1){
++resultCount;
if(resultCount==1||resultCount==2||resultCount==3){
printQueen(resultCount);
}
}else{
putQueen(row + 1);
}
for (int rows = row + 1; rows < QUEEN_MAX; rows++){
Queencount[rows][column]--;
if (column - rows + row >= 0){
Queencount[rows][column - rows + row]--;
}
if (column + rows - row < QUEEN_MAX){
Queencount[rows][column + rows - row]--;
}
}
}
}
if (row == 0){
System.out.println(QUEEN_MAX + "皇后问题共有" + resultCount + "个解.");
}
}
<span style="white-space:pre"> </span>public void printQueen(int size){
System.out.println(QUEEN_MAX + "皇后的第" + size + "个解是:");
System.out.println();
for (int row = 0; row < QUEEN_MAX; row++){
for (int column = 0; column < QUEEN_MAX; column++){
System.out.print(Queenplace[row] == column ? " Q " : " X ");
}
System.out.println();
}
System.out.println();
}
<span style="white-space:pre"> </span>public static void main(String[] args){
Queen Q = new Queen();
Q.putQueen(0);
}
}
为了实现因材施教的目标,现教务处计划对学生进行摸底并分类,假如使用K均值聚类算法,并且认为学生大概可以分为四类,分别为“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”。现在你是该项目的负责人,(1)请设计一个较为完整的项目实施方案;(2)你是否认可对学生进行分类?(3)按照你给定的实施方案与需要测量的要素(如天学习时间),请尝试按照自身情况对其进行回答,以及对自身的评价与定位和努力目标。
答:
(1)项目实施方案
目标类型:“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”
实施方式:问卷调查,间接调查;
分类要素:每天学习时间(包括学习专业相关书籍,练习等时间),每天娱乐时间,假期学习时间,假期娱乐时间,上课出勤率,考试成绩,课外活动积极性,是否有近期目标,课外知识面。
分类方式:时间性相关的可以与总时间对比,其他可根据实际情况调查了解。
(2)不清楚。“因材施教”更有助于优秀学生提高学习的效率;“有教无类”又是知识共享的公平性。
(3)
====问题回答:
每天学习时间:3/8(包括平时上课时间)
每天娱乐时间:5/8
假期学习时间:1/2
假期娱乐时间1/2
上课出勤率:1
考试成绩:良
课外活动积极性:积极
是否有近期目标:有
课外知识面:较窄
====自身评价与定位
自以为,自己应属于“积极主动型”与“迷茫无目标型”的交集处
自己有目标,但还是惰性太多。
====努力目标
近期:在大四考过中级软考
长期:毕业后能找到自己喜欢的工作。