实验内容
(1)八皇后及N皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。
请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题
public class Queen {
// 同栏是否有皇后,1表示有
private int[] column;
// 右上至左下是否有皇后
private int[] rup;
// 左上至右下是否有皇后
private int[] lup;
// 解答
private int[] queen;
// 解答编号
private int num;
private final int type = 8;
public Queen() {
column = new int[type+1];
rup = new int[2*type+1];
lup = new int[2*type+1];
for(int i = 1; i <= type; i++)
column[i] = 1;
for(int i = 1; i <= 2*type; i++)
rup[i] = lup[i] = 1;
queen = new int[type+1];
}
public void backtrack(int i) {
if(i > type) {
showAnswer();
} else {
for(int j = 1; j <= type; j++) {
if(column[j] == 1 && rup[i+j] == 1 && lup[i-j+type] == 1) {
queen[i] = j; // 设定为占用
column[j] = rup[i+j] = lup[i-j+type] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+type] = 1;
}
}
}
}
protected void showAnswer() {
num++;
System.out.println("\n解答 " + num);
for(int y = 1; y <= type; y++) {
for(int x = 1; x <= type; x++) {
if(queen[y] == x) {
System.out.print(" Q");
} else {
System.out.print(" *");
}
}
System.out.println();
}
}
public static void main(String[] args) {
Queen queen = new Queen();
queen.backtrack(1);
}
}
对于N皇后问题 只要修改程序中type 的值即可。
(2)学生聚类分析思考
a:设计实施方案:通过在学校网站上发布调查问卷的方式,统一收集学生做调查问卷的结果,分析整理并得出结论。测量的要素包括:每天学习的时间 / 游戏时间 / 锻炼时间 / 职业规划 / 大学目标 / 人生目标 / 学习方式
b:我认可对学生进行分类,这样可以方便老师或者学校更好的对学生进行教育,针对不同类型的学生进行教学或者进行相应的思想教育,对于学生来说,也有利于他们更好的成长和学习。
c:对于我自己来说,如果当天没有什么特别的事,一般会花三四个钟学习相关专业的知识,我不玩游戏,每天锻炼二十分钟,不过没有说每天都坚持,有时候太累了就没有锻炼,我现在已经把自己未来的工作定位在前端工程师这方面,所以也有在学习相关方面的知识,这个暑假也打算留在学校一段时间,好好学习专业知识,为下个学期的实习打好基础 ,学习主要靠自学,自己阅读相关方面的书籍,遇到问题 就请教一些比较厉害的同学,自己上网找相关资料。