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

    请编程实现八皇后问题,并把92种解的前三种解输出到屏幕(8*8的二维矩阵,Q代表皇后,X代表空)。并把此问题的求解过程延伸到N皇后问题。

解题思路:我们採用回溯的思想来解这道题,開始我们从第一行第一列開始放第一个皇后,然后依次在第二行可放皇后的位置放置皇后,直到最后到达列的最大值时还没有将皇后放完,通过又一次回溯到第二列依次进行反复的操作,否则得到对应的皇后排放方法。

以下的代码能够实现n皇后问题的求解。

源码

package review;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; public class queens { public static int num = 0; // 累计方案总数
public static int queensnumber; // 皇后个数,同一时候也是棋盘行列总数
public static int[] cols; // 定义cols数组,表示n列棋子摆放情况 public static void main(String args[]) {
System.out.println("请输入要展示 的皇后数量");
BufferedReader strin = new BufferedReader(new InputStreamReader(
System.in));
try {
queensnumber = Integer.parseInt(strin.readLine());
if (queensnumber <= 0) {
System.out.println("输入不对");
} else {
System.out.println("展示前三种摆法");
queens queen = new queens(queensnumber);
}
} catch (Exception e) {
System.out.println("输入不对");
}
} public queens(int queensnumber) {
cols = new int[queensnumber];
getArrangement(0, queensnumber);
System.out.println(queensnumber + "皇后问题有" + num + "种摆放方法。");
} public void getArrangement(int n, int queensnumber) { // 遍历该列全部不合法的行,并用rows数组记录,不合法即rows[i]=true
boolean[] rows = new boolean[queensnumber];
for (int i = 0; i < n; i++) {
rows[cols[i]] = true; // 摆放了设置为true
int d = n - i;
if (cols[i] - d >= 0)
rows[cols[i] - d] = true;
if (cols[i] + d <= queensnumber - 1)
rows[cols[i] + d] = true;
}
for (int i = 0; i < queensnumber; i++) {
// 推断该行是否合法
if (rows[i])
continue;
// 设置当前列合法皇后所在行数
cols[n] = i;
// 当前列不为最后一列时
if (n < queensnumber - 1) {
getArrangement(n + 1, queensnumber);// 递归
} else {
// 累计方案个数
num++;
// 打印
print();
}
}
} public void print() { if (num >= 4) // 打印前三中方案
{
return;
} else {
System.out.println("第" + num + "种摆法 ");
for (int i = 0; i < queensnumber; i++) {
for (int j = 0; j < queensnumber; j++) {
if (i == cols[j]) {
System.out.print("Q ");
} else
System.out.print("* ");
}
System.out.println(" ");
}
}
}
}

结果例如以下:

四皇后:

八皇后

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

分析思路:由于我们是採用k均值聚类算法,以下就是该算法的步骤,那么我们就应该依据步骤来开展和实施。

K-means聚类算法的一般步骤:

  1. 初始化。输入基因表达矩阵作为对象集X,输入指定聚类类数N,并在X中随机选取N个对象作为初始聚类中心。设定迭代中止条件,比方最大循环次数或者聚类中心收敛误差容限。
  2. 进行迭代。依据相似度准则将数据对象分配到最接近的聚类中心,从而形成一类。初始化隶属度矩阵。
  3. 更新聚类中心。然后以每一类的平均向量作为新的聚类中心,又一次分配数据对象。
  4. 重复运行第二步和第三步直至满足中止条件。

(1)详细的实施方案:1、准备工作:在我们确定开展这项活动后,首先我们要进行对象的选取形成对象集X,这里我们的对象就是学校的学生,然后我们要进行指定聚类类数N,这个就是我们将学生分成哪几种类型,以及类型的总数。之后,我们就能够从x随机抽取N个对象(学生)作为聚类的中心,设定对应的迭代中止条件。

2、进行迭代,我们開始对我们的对象进行大量的实际调查,得到对应的数据,然后依据相似度准则将数据对象分配到最接近聚类中心,从而形成一类,初始化隶属度矩阵。实际上这个做的就是将收集后的数据通过迭代的方式进行分类,达到我们对几种不同学生数据的分类。

3、更新聚类中心,然后以每一类的平均量作为新的聚类中心,又一次分配数据对象。这个的优点就是通过调查统计过程中的实时数据来不断的更新我们的实施方案,能够降低统计的出错率。

4、重复进行第二第三步,达到中止条件为止。也就是我们在开展调查时,数量达到一定量(预估足够完毕我们的统计工作,事先设立的,我们就能够停止调查工作。)

详细的实施过程中,我们能够调查同学的“天学习时间、天游戏时间、上课时间、去图书馆时间、參加社团活动时间、看课外书时间…………

有了上面的这样的思路,我们开展这个调查的方式能够通过的方式有:网上问卷调查,实地跟踪问卷调查。为了达到每一个人參与的效果我们能够把这个加到教务系统的教学评估模块,对大家进行评判。为了能够正确的理解和正确的态度来完毕这个调查,前期一定要做好相关的宣传工作,否则收取不到可靠的数据资料,我们的调查将会大打折扣。

(2)假设这个分类仅仅是作为一个调查,然后依据调查来开展教学活动的话是能够的,这对学生进行分类,并非对学生进行369等的来进行分类和对待。可是我们也应该要有较多的注意事项,比方匿名工作,保护学生的隐私。假设将来开展活动,老师等人要抱着一种同等对待学生的眼光。因此,我们不能大肆的贴上学生类型到个人标签上,这样不利学生的发展。

(3)自身的评价:

天学习时间

1、上课时间:3小时

2、课外完毕作业时间:1小时

3、看课本书:0.2小时

4、其它学习时间:2小时

娱乐时间

1、体育运动:0.3小时

2、看新闻、电视剧、电影:2小时

学生工作时间

1、协助老师完毕工作:0.5小时

2、班级、社团学生会:0.5小时

生活起居时间

1、起床:0.5小时

2、吃饭:1小时

……

自我评价:总的来说,我是一个较为踏实的人,不玩游戏,參加活动比較积极的人。每天都感觉自己有比較多的事情在忙,较为充实。可是专业知识还不够扎实,专业动手能力较差。尽管如今已经是大三了,时间不怎么多,可是自己还是会坚持的学下去。尽自己最大的能力来提高自己。假设要用上面四种类型来限定自己的话,我好想哪一种都不属于,由于我认为我有时主动,有时又不主动,学习态度端正,但并非那种学霸,学习能力特别强。我不玩游戏,也有一定的目标。给自己一个类型的话:我认为我是一个踏实上进型。

第1次实验——NPC问题(回溯算法、聚类分析)的更多相关文章

  1. 计科1111-1114班第一次实验作业(NPC问题——回溯算法、聚类分析)

    实验课安排 地点: 科技楼423 时间:  计科3-4班---15周周一上午.周二下午 计科1-2班---15周周一下午.周二晚上(晚上时间从18:30-21:10) 请各班学委在实验课前飞信通知大家 ...

  2. 46. Permutations 回溯算法

    https://leetcode.com/problems/permutations/ 求数列的所有排列组合.思路很清晰,将后面每一个元素依次同第一个元素交换,然后递归求接下来的(n-1)个元素的全排 ...

  3. ACM/ICPC 之 最长公共子序列计数及其回溯算法(51Nod-1006(最长公共子序列))

    这道题被51Nod定为基础题(这要求有点高啊),我感觉应该可以算作一级或者二级题目,主要原因不是动态规划的状态转移方程的问题,而是需要理解最后的回溯算法. 题目大意:找到两个字符串中最长的子序列,子序 ...

  4. c语言数据结构:递归的替代-------回溯算法

    1.要理解回溯就必须清楚递归的定义和过程. 递归算法的非递归形式可采用回溯算法.主要考虑的问题在于: 怎样算完整的一轮操作. 执行的操作过程中怎样保存当前的状态以确保以后回溯访问. 怎样返回至上一次未 ...

  5. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  6. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

  7. 回溯算法之n皇后问题

    今天在看深度优先算法的时候,联想到DFS本质不就是一个递归回溯算法问题,只不过它是应用在图论上的.OK,写下这篇博文也是为了回顾一下回溯算法设计吧. 学习回溯算法问题,最为经典的问题我想应该就是八皇后 ...

  8. 回溯算法-C#语言解决八皇后问题的写法与优化

    结合问题说方案,首先先说问题: 八皇后问题:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 嗯,这个问题已经被使用各种语言解 ...

  9. Sicily-1152 回溯算法

    一.题意: 走日字,每个位置都有有8种新位置,从起点开始刚好过29步遍历其他位置一遍. 二.代码 // // main.cpp // Sicily-1152 回溯算法 // // Created by ...

随机推荐

  1. shell的特殊符号的表示

    shell中存在一些特殊的符号.这些符号可以帮助我们更好的写出shell来 1.特殊字符 符号          使用 输出 ,             枚举分隔符 .             当前目 ...

  2. 成都大数据Hadoop与Spark技术培训班

    成都大数据Hadoop与Spark技术培训班   中国信息化培训中心特推出了大数据技术架构及应用实战课程培训班,通过专业的大数据Hadoop与Spark技术架构体系与业界真实案例来全面提升大数据工程师 ...

  3. iText 文本

    iText中用文本块(Chunk).短语(Phrase)和段落(paragraph)处理文本. 文本块(Chunk)是处理文本的最小单位,有一串带格式(包括字体.颜色.大小)的字符串组成.如以下代码就 ...

  4. 第十六周oj刷题——Problem J: 填空题:静态成员---计算学生个数

    Description 学生类声明已经给出.在主程序中依据输入信息输出实际建立的学生对象个数,以及全部学生对象的成绩总和. Input 学生个数 相应学生个数的学生信息(姓名    年龄    成绩) ...

  5. setStyleSheet来设定窗口部件的样式

    使用setStyleSheet来设置图形界面的外观:QT Style Sheets是一个很有利的工具,允许定制窗口的外观,此外还可以用子类QStyle来完成,他的语法很大比重来源于html的CSS,但 ...

  6. navicat for mysql 如何将表ID排序重1开始?

    如果是自增字段,删除数据,他是根据原来的继续往后排的 1.你可以删除这个字段,重新建立个自增字段就可以了 2.好像也可以重新设置排序起始 alter table table_name AUTO_INC ...

  7. PAIP: Paradigms of Artificial Intelligence Programming

    PAIP: Paradigms of Artificial Intelligence Programming PAIP: Paradigms of Artificial Intelligence Pr ...

  8. HNCU1101:马的移动(BFS)

    http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1101 题目描述 小明很喜欢下国际象棋,一 ...

  9. OCA读书笔记(9) - 管理数据同步

    9.Managing Data Concurrency 描述锁机制以及oracle如何管理数据一致性监控和解决锁冲突 管理数据的并发--管理锁数据的不一致:脏读更改丢失幻影读 脏读:数据是指事务T2修 ...

  10. Transparency Tutorial with C# - Part 2

    Download Compositing Mode demo project - 24 Kb Download Compositing Mode source - 26 Kb Download Com ...