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

实验内容

(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:对于我自己来说,如果当天没有什么特别的事,一般会花三四个钟学习相关专业的知识,我不玩游戏,每天锻炼二十分钟,不过没有说每天都坚持,有时候太累了就没有锻炼,我现在已经把自己未来的工作定位在前端工程师这方面,所以也有在学习相关方面的知识,这个暑假也打算留在学校一段时间,好好学习专业知识,为下个学期的实习打好基础 ,学习主要靠自学,自己阅读相关方面的书籍,遇到问题 就请教一些比较厉害的同学,自己上网找相关资料。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值