第1次实验——NPC问题(回溯算法、聚类分析) N皇后的问题
2014-06-09 23:53
507 查看
(1)八皇后及N皇后问题
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。
请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题。
代码实现如下:
本代码可以实现N皇后的任意N值求解。但缺点在于可能时间效率上应该还可以优化。采用的思想有n进制数字相加。然后判断数字的每一位是否恰好满足N皇后的条件。本程序会输出所有的结果,最后一种方案就可以看出八皇后有92种方案。
(2)学生聚类分析思考(PPT,PDF)
为了实现因材施教的目标,现教务处计划对学生进行摸底并分类,假如使用K均值聚类算法,并且认为学生大概可以分为四类,分别为“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”。现在你是该项目的负责人,(1)请设计一个较为完整的项目实施方案;(2)你是否认可对学生进行分类?(3)按照你给定的实施方案与需要测量的要素(如天学习时间),请尝试按照自身情况对其进行回答,以及对自身的评价与定位和努力目标。
答:可以使用问卷星对学生调查,具体需要测量的因素,如学习时间,游戏时间,平时的兴趣爱好,作业完成程度,是否经常去图书馆等。
同时我认为学生不应该有三六九等之分,每个人都是平等的,他们已经是大学生,老师所能做的也只能是引导他们走向成功,这项调查不宜执行,因为每个人都想往好的方向走,给他定义一个差的头衔,谁都不愿意。
对于以前的我,尽管大一,大二都是班里的第一,也都拿到了校一等奖学金。但我不认为我是一个好学生,依然玩过来的。因为要决定考研,每天几乎没有了游戏的时间,虽然比较累,但会很充实。
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。
请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题。
代码实现如下:
package 算法作业; import java.util.Scanner; public class NQueen { public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入N皇后的N值(阿拉伯数字):"); int n = scan.nextInt(); scan.close(); queen(n); } private static void queen(int n) {//参数是代表几皇后的问题 int[] q = new int ; int count = 0;//统计一共有多少种结果。 for(int i=0;i<q.length; i++) { q[i] = 0; } int j; outer: while(q[0] < q.length) { for(j=q.length-1; q[j]<q.length; q[j]++) { if(isQueen(q)) { count++; System.out.println("第"+count+"种方案如下:"); show(q); } } while(q[j] == q.length && j>0) { q[j] = 0; q[--j]++; } continue outer; } } //判断数组中存储的是不是一组皇后。 private static boolean isQueen(int[] arr) { if(isEquals(arr)) { return false; } for(int i=1; i<arr.length;i++) { for(int j=0; j<i;j++) { if(arr[i]+i == arr[j]+j || arr[i]+j == arr[j]+i) { return false; } } } return true; } //判断是否有两个皇后在同一列上。 private static boolean isEquals(int[] arr) { int a[] = new int[arr.length]; for (int i=0;i<a.length;i++) { a[i] = arr[i]; } java.util.Arrays.sort(a); for(int i = 0; i < a.length-1 ; i++) { if(a[i] == a[i+1]) { return true; } } return false; } /* * 显示N皇后的结果。 */ private static void show(int[] arr) { System.out.print(" \t"); for (int i=0; i<arr.length; i++) { System.out.print(i+"\t"); } System.out.println(); for(int i=0; i<arr.length; i++) { System.out.print(i+"\t"); for(int j=0; j<arr.length; j++) { if(arr[i] == j) { System.out.print("Q\t"); }else { System.out.print("X\t"); } } System.out.println(); } } }运行结果如下:
本代码可以实现N皇后的任意N值求解。但缺点在于可能时间效率上应该还可以优化。采用的思想有n进制数字相加。然后判断数字的每一位是否恰好满足N皇后的条件。本程序会输出所有的结果,最后一种方案就可以看出八皇后有92种方案。
(2)学生聚类分析思考(PPT,PDF)
为了实现因材施教的目标,现教务处计划对学生进行摸底并分类,假如使用K均值聚类算法,并且认为学生大概可以分为四类,分别为“积极主动型”、“学霸型”、“游戏人生型”、“迷茫无目标型”。现在你是该项目的负责人,(1)请设计一个较为完整的项目实施方案;(2)你是否认可对学生进行分类?(3)按照你给定的实施方案与需要测量的要素(如天学习时间),请尝试按照自身情况对其进行回答,以及对自身的评价与定位和努力目标。
答:可以使用问卷星对学生调查,具体需要测量的因素,如学习时间,游戏时间,平时的兴趣爱好,作业完成程度,是否经常去图书馆等。
同时我认为学生不应该有三六九等之分,每个人都是平等的,他们已经是大学生,老师所能做的也只能是引导他们走向成功,这项调查不宜执行,因为每个人都想往好的方向走,给他定义一个差的头衔,谁都不愿意。
对于以前的我,尽管大一,大二都是班里的第一,也都拿到了校一等奖学金。但我不认为我是一个好学生,依然玩过来的。因为要决定考研,每天几乎没有了游戏的时间,虽然比较累,但会很充实。
相关文章推荐
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验 - NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)
- 第1次实验——NPC问题(回溯算法、聚类分析)