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

来源:互联网 发布:中国最好的云计算公司 编辑:程序博客网 时间:2024/05/16 06:14

第一题:N皇后问题(八皇后为例):

代码如下:

<pre name="code" class="java">package queen;class Queen{static final int n = 8; // 皇后的数量int[][] x = new int[n][n];// 分配8X8的数组,充当棋盘,存放皇后int sum = 0;// 记录皇后的放置方法的总数int[] y = new int[n];// 存放每行的皇后位置即第column行的皇后放置位置是y[column]public void putQueen(int Rows){int row = Rows;for (int column = 0; column < n; column++){if (x[row][column] == 0){for (int rowi = row + 1; rowi < n; rowi++){x[rowi][column]++;if (column - rowi + row >= 0){x[rowi][column - rowi + row]++;}if (column + rowi - row < n){x[rowi][column + rowi - row]++;}} y[row] = column;if (row == n - 1){printQueen(++sum);}else{putQueen(row + 1);}for (int rows = row + 1; rows < n; rows++)// 回溯,在此行的皇后不放此列column// ,恢复该位置的正下面/斜下面的count{x[rows][column]--;if (column - rows + row >= 0){x[rows][column - rows + row]--;}if (column + rows - row < n){x[rows][column + rows - row]--;}}}}if (row == 0){System.out.println(n + "皇后问题共有" + sum + "个解.");}}public void printQueen(int size)// 打印皇后布局{System.out.println(n + "皇后的第" + size + "个解是:");System.out.println();for (int row = 0; row < n; row++){for (int column = 0; column < n; column++){System.out.print(y[row] == column ? " Q " : " X ");}System.out.println();}System.out.println();}public static void main(String[] args){Queen Q = new Queen();Q.putQueen(0);}}


 

0 0
原创粉丝点击