第1次实验——NPC问题(回溯算法、聚类分析)

来源:互联网 发布:abb机械手编程软件 编辑:程序博客网 时间:2024/06/10 18:58

(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);}}


(2)学生聚类分析思考(PPT,PDF)

    为了实现因材施教的目标,现教务处计划对学生进行摸底并分类,假如使用K均值聚类算法,并且认为学生大概可以分为四类,分别为“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”。现在你是该项目的负责人,(1)请设计一个较为完整的项目实施方案;(2)你是否认可对学生进行分类?(3)按照你给定的实施方案与需要测量的要素(如天学习时间),请尝试按照自身情况对其进行回答,以及对自身的评价与定位和努力目标。

答:

(1)项目实施方案
目标类型:“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”
实施方式:问卷调查,间接调查;
分类要素:每天学习时间(包括学习专业相关书籍,练习等时间),每天娱乐时间,假期学习时间,假期娱乐时间,上课出勤率,考试成绩,课外活动积极性,是否有近期目标,课外知识面。
分类方式:时间性相关的可以与总时间对比,其他可根据实际情况调查了解。
(2)不清楚。“因材施教”更有助于优秀学生提高学习的效率;“有教无类”又是知识共享的公平性。
(3)
====问题回答:
每天学习时间:3/8(包括平时上课时间)
每天娱乐时间:5/8
假期学习时间:1/2
假期娱乐时间1/2
上课出勤率:1
考试成绩:良
课外活动积极性:积极
是否有近期目标:有
课外知识面:较窄
====自身评价与定位
自以为,自己应属于“积极主动型”与“迷茫无目标型”的交集处
自己有目标,但还是惰性太多。
====努力目标
近期:在大四考过中级软考
长期:毕业后能找到自己喜欢的工作。

0 0