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

(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
考试成绩:良
课外活动积极性:积极
是否有近期目标:有
课外知识面:较窄
====自身评价与定位
自以为,自己应属于“积极主动型”与“迷茫无目标型”的交集处
自己有目标,但还是惰性太多。
====努力目标
近期:在大四考过中级软考
长期:毕业后能找到自己喜欢的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值