包含8个皇后的java的代码的词条( 二 )


cQueenQ1=new cQueen(8);//大于10,你的微机可能要死机!
//第一个皇后可以在任意一行布放
Q1.resolve(0);//参数在0到n-1之间任选
Q1.HowMany();
}
}//类Queen定义结束
关于看代码的人人都知道的小技巧,最小试探法来输出结果进行比较和分析
java八皇后问题希望8个皇后的java的代码我解释8个皇后的java的代码的8个皇后的java的代码你能明白:
把棋盘看成二维方阵 , 行从上到下编号0-7(就是i),列从左到右编号0-7(就是j),这样棋盘上每个点都可以表示为(i , j)
从键盘的右上角(0,7)到左下角(7,0)的对角线,以及这条线的平行线 , 就是反对角线,也就是这个程序里的undiagonal 。显然这个反对角线上任意2点(i1 , j1)和(i2,j2)都满足i1+j1=i2+j2.因为i+j可能的取值范围是从0到14,所以把这个数组的长度定义为16(事实上15就可以了)
从键盘的左上角(0,0)到右下角(7,7)的对角线以及平行线 , 就是对角线,就是diagonal 。同理,这个对角线及其平行线上任意2点都满足i1-i2=j1-j2.i-j的范围是-7到7,为了避免出现负数,程序里在这里+7,也是一个长度为16的数组(还是15就够了)
程序一开始的时候,i=j=0 , 所有的安全标识都是true , 所以(0,0)这个点会被输出 。这时,把diagonal【7】置为false 。因为(1,1),(2,2)等等这些点都和(0,0)在一条对角线上(因为0-0+7=1-1+7=2-2+7),所以把这些点的对应的diagonal都置为false,也就是把diagonal【7】置为false
并且把undiagonal【0】也置为false,但是因为undiagonal【0】对应的元素只有(0,0)(因为只有0+0=0),所以这个对这一步没什么影响 。
然后一点点递推,回溯 , 步骤就是这样 。希望你看得懂 , 如果不明白的话给我发消息吧
JAVA中八皇后问题算法和流程图 。要求用回溯法,求大神解答 , 在线等如果有代码就完美了[cpp] view plaincopyprint?
//--------------------------------------
//利用函数递归8个皇后的java的代码,解决八皇后问题
//
//zssure2014-03-12
//--------------------------------------
#include stdio.h
#include cmath
int count=0;//全局计数变量
/*--------------------四个皇后----------------------*/
//#define QUEEN_NUM 4
//int label[QUEEN_NUM][QUEEN_NUM]={ 0,0,0,0,
//0,0,0,0,
//0,0,0,0,
//0,0,0,0 };
/*--------------------五个皇后----------------------*/
//#define QUEEN_NUM 5
//int label[QUEEN_NUM][QUEEN_NUM]={ 0,0,0,0,0,
//0,0,0,0,0,
//0,0,0,0,0,
//0,0,0,0,0,
//0,0,0,0,0};
/*--------------------六个皇后----------------------*/
//#define QUEEN_NUM 6
//int label[QUEEN_NUM][QUEEN_NUM]={ 0,0,0,0,0,0,
//0,0,0,0,0,0,
//0,0,0,0,0,0,
//0,0,0,0,0,0,
//0,0,0,0,0,0,
//0,0,0,0,0,0
//};
/*--------------------七个皇后----------------------*/
//#define QUEEN_NUM 7
//int label[QUEEN_NUM][QUEEN_NUM]={ 0,0,0,0,0,0,0,
//0,0,0,0,0,0,0,
//0,0,0,0,0,0,0,
【包含8个皇后的java的代码的词条】//0,0,0,0,0,0,0,
//0,0,0,0,0,0,0,
//0,0,0,0,0,0,0,
//0,0,0,0,0,0,0
//};
/*--------------------八个皇后----------------------*/
#define QUEEN_NUM 8
int label[QUEEN_NUM][QUEEN_NUM]={0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0};
void FillChessbox(int m,int n,int num)

推荐阅读