}
//求解n皇后问题
/*
此函数试图在n*n的棋盘的第i行上放一个皇后,
若找到可以放的位置,就递归调用自身试图在i+1行
放另一个皇后,若第i行是最后一行,则打印棋盘 。
*/
public void resolve(int i) {
int j;
// 在第i行给定后检查棋盘上的每一列
for(j=0;jn;j++) {
//如果在第i行的第j列可以布放皇后
if(col[j]==0md[n+i-j-1]==0sd[i+j]==0){
Q++;q[i]=j; //布放皇后,第i行皇后在第几列
// 标记新布皇后的攻击范围
col[j]=md[n+i-j-1]=sd[i+j]=1;
// 如果已经布了n个皇后(得到了一组解),
// 把棋盘(解)打印出来 。
if(Q==n) showBoard();
// 否则,递归 。在第i行第j列布放皇后的前提下,
//试探下一行(i+1行)在哪一列布皇后?
else if(in-1) resolve(i+1);
else resolve(0); //因为约定起始行可以任选
//移除在第i行的第j列新布的皇后,
//并消除所标记的攻击范围 , 为回溯作准备 。
Q--;q[i]=0;
col[j]=md[n+i-j-1]=sd[i+j]=0;
//试探在第i行的第j+1列新布皇后的方案(新解)
}
} //下一列,j循环
//对于给定的行,列扫描完毕后,从这里回溯 。
}
//输出解的个数
public void HowMany() {
System.out.println(n+"皇后问题共有解"+r+"组 。");
}
//主方法main()
public static void main(String []args) {
//定义一个8皇后问题(有92组解)
cQueenQ1=new cQueen(8);//大于10,你的微机可能要死机!
//第一个皇后可以在任意一行布放
Q1.resolve(0);//参数在0到n-1之间任选
Q1.HowMany();
}
}//类Queen定义结束
关于看代码的人人都知道的小技巧,最小试探法来输出结果进行比较和分析
救助八皇后JAVA程序代码public class demo {
public static int N = 0;
public static int ROW = 8;
public int[][] chase = new int[demo.ROW][demo.ROW];
public demo() {
for (int i = 0; idemo.ROW; i++)
for (int j = 0; jdemo.ROW; j++)
chase[i][j] = 0;
}
public void copy(int[][] k, int[][] l) {
for (int i = 0; idemo.ROW; i++)
for (int j = 0; jdemo.ROW; j++)
l[i][j] = k[i][j];
}
public void changeChase(int[][] chase, int row, int i) {
for (int j = 1; jdemo.ROW; j++) {
chase[row][j] = 1;
chase[j][i] = 1;
}
for (int j = 1; jdemo.ROW; j++) {
if (row - j = 0i - j = 0)
chase[row - j][i - j] = 1;
if (row + j = 7i - j = 0)
chase[row + j][i - j] = 1;
if (row - j = 0i + j = 7)
chase[row - j][i + j] = 1;
if (row + j = 7i + j = 7)
chase[row + j][i + j] = 1;
}
chase[row][i] = 2;
}
public void putout(int[][] chase) {
for (int i = 0; idemo.ROW; i++) {
for (int j = 0; jdemo.ROW; j++)
System.out.print(chase[i][j] + " ");
System.out.println();
}
}
public void putQueen(int row, int[][] m) {
if (row == 8) {
System.out.println("this is the" + demo.N++ + "个答案:");
putout(m);
} else {
for (int i = 0; i8; i++) {
if (m[row][i] == 0) {
int[][] l = new int[demo.ROW][demo.ROW];
copy(m, l);
changeChase(l, row, i);
putQueen(row + 1, l);
}
}
}
}
public static void main(String[] Args) {
demo Q = new demo();
Q.putQueen(0, Q.chase);
}
}
【java八皇后代码 python八皇后代码】关于java八皇后代码和python八皇后代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 阿里云服务器连接,阿里云服务器连接不稳定
- angularjs监听事件,angular 监听
- 虚拟机多开怎样设置ip,虚拟机多开用什么网络模式
- 联想怎么加播放速度显卡,联想怎么加播放速度显卡设置
- c与cvb.net的简单介绍
- 拍视频什么快门声音好用,拍视频什么快门声音好用一点
- linux自带解压命令,linux系统解压命令
- Python函数proc python函数print
- mysql查询库的命令,mysql查询数据库表命令