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


(1)八皇后及N皇后问题

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后,有多种方法可以解决此问题。

源代码如下:

package 算法;

public class EightQueen {  
    private int index = 1;  
    private final static int SCALE = 8;  
    private int[] answer = new int[SCALE];  
  
    private void initArray() {  
        for (int i = 0; i < answer.length; i++) {  
            answer[i] = -1;  
        }  
    }  
  
    private boolean canStay(int row, int col) {  
        for (int i = 0; i < row; i++) 
        {  
            if (answer[i] == col  || Math.abs(row - i) == Math.abs(col - answer[i])) 
            {  
                return false;  
            }  
        }  
        return true;  
    }  
  
    private void calculate() {  
        for (int row = 0; row < SCALE; row++) 
        {  
            if (answer[row] == -1) 
            {  
                answer[row] = 0;  
            }  
  
            for (int col = answer[row]; col <= SCALE; col++) 
            {  
                if (col == SCALE) 
                {  
                    answer[row] = -1;  
                    row--;  
                    if (row < 0) 
                    {  
                        return;  
                    }  
                    col = answer[row];  
                    continue;  
                }  
  
                if (canStay(row, col)) 
                {  
                    answer[row] = col;   
                    if (row == SCALE - 1) 
                    {  
                        showMsg();  
                        continue;  
                    }  
                    break;  
                }  
            }  
        }  
    }  
  
    private void showMsg() {  
     if (index<4)
     {
     System.out.println(" - 第" + index + "种方案 -");  
     for (int i = 0; i < answer.length; i++) 
     {  
     for (int j = 0; j < SCALE; j++) 
     {  
     if (answer[i] == j) 
     {  
     System.out.print("Q ");  
     } else {  
     System.out.print("X ");  
     }  
     }  
     System.out.println("");  
     }  
     System.out.println("\n");  
     index++;  
     }  
     }
  
    public EightQueen() {  
        initArray();  
        calculate();  
    }  
  
    public static void main(String[] args) {  
     System.out.println("列举"+SCALE+"皇后问题的前 3 种方案!");
     System.out.println();
        EightQueen eightQueen = new EightQueen();  
    }  
}  

 

 

 

具体实施方案:

在教学系统上以类似教学评估的方式让每个同学上填写以下问卷

1、所属 计算机科学与技术

2、每周课时 16

3、性别( A A、男 B、女

4、您是否喜欢现在所学专业?(A ) A、是 B、一般 C、否

 

5 你自己有明确的目标吗(自己将来要做什)?A

A    B 没有

 

6 你每天平均学习时间是?B

A  1小时以下   B 1~4小时 C 4~8小时  D 8小时以上

7、您是否参加学校开展的各种学校社团和活动赛程?(B A、是 B、否

8、你是否参加培训班?( A)参加何种培训班?( [可多选]

A、否 B、会计 C、计算机 D、公务员

E、四.六级 F、考研 G、其他

9.您是否经常上网,使用网络主要做什么?(C

A、否 B、玩游戏 C、聊天 D、看电影或电视节目 E 、用于学习

10、您觉得您平时时间够用吗?( A A、足够 B、不够 C、没感觉

11、您是否有浪费时间的感觉?( A A、是 B、否

12、您是否有对课余时间进行利用的计划?( B A、是 B、否

13、您的课余时间更多用于学习?( D) A考证书 B知识拓展 C职业素质培养 D考研

14、周末的课余时间主要是怎么利用?( B

A、兼职打工 B、自主学习 C、休闲娱乐 D、漫无目的

15、您对现状是否感到满意?( B) A、很满意 B、基本满意 C、不满意 D、无所谓

16 您希望改变现状的时间安排状况吗?( A) A、迫切希望 B、无所谓 C、不希望

17.您利用课余时间的根据是什么?(D )

A、毫无根据,想到做什么就做什么 B、受周围同学影响

C、兴趣爱好 D、要实现的目标

18.什么原因对你课余时间安排造成的不良影响比较大?( B) [可多选]

A、学校作业太多,自主时间太少 B、时间安排合理,过的充实

C、兼职时间占得太多 D、毫无计划,没有目的 E、娱乐时间太多

我认为可以对学生进行分类 我的回答如上填写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lulu无为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值