首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java-八皇后有关问题

2012-08-30 
java-八皇后问题public class EightQueen {/** * 八皇后问题 * obviously,the location of a queen includ

java-八皇后问题

public class EightQueen {/** * 八皇后问题 * obviously,the location of a queen includes two index: row and column * 1.the eight queens should be put in different rows and different columns * 2.so,a integer array-(we name it columnIndex[8]) *    the index of array is from 0 to 7,we can use it as the rowIndex of a location: *    rowIndex:     0  1  2  3  4  5  6  7  *    columnIndex:  a0 a1 a2 a3 a4 a5 a6 a7(well,ai=columnIndex[i]) * 3.a0 a1 a2 a3 a4 a5 a6 a7 is a permutation of (0 1 2 3 4 5 6 7) * 4.we output the permutations which does not violate the rules of EightQueen: *  "任两个皇后都不能处于同一条横行、纵行或斜线上" * 5.but how to judge? *   let's look at this.we assume that after a permutation,the status is: *     i= 0 1 2 3 4 5 6 7 *   a[i]=0 4 5 7 2 6 1 3 *   we found that (1,4) and (2,5) share the same diagonal. *   that is a[i]-a[j]=i-j or a[i]-a[j]=j-i *  */public static void main(String[] args) {int MAX=8;int[] columnIndex=new int[MAX];for(int i=0;i<MAX;i++){columnIndex[i]=i;}eightQueen(columnIndex,0,MAX-1);//permutation(a,0,a.length-1)System.out.println(sum);}private static int sum;//produce permutation,print it if it obeys the rules of EightQueenpublic static void eightQueen(int[] columnIndex,int first,int last){if(first==last){if(check(columnIndex)){printQueenLocation(columnIndex);sum++;}}else{for(int i=first;i<=last;i++){swap(columnIndex,first,i);eightQueen(columnIndex,first+1,last);swap(columnIndex,first,i);}}}//the rule:can't be (a[i]-a[j]=i-j or a[i]-a[j]=j-1)public static boolean check(int[] columnIndex){boolean re=true;for(int i=0,len=columnIndex.length;i<len;i++){for(int j=i+1;j<len;j++){if((j-i==columnIndex[j]-columnIndex[i])||(i-j==columnIndex[j]-columnIndex[i])){re=false;break;}}}return re;}//print (i,j)public static void printQueenLocation(int[] columnIndex){for(int i=0,len=columnIndex.length;i<len;i++){System.out.print("(i,j)=("+i+","+columnIndex[i]+")");}System.out.println();}public static void swap(int[] a, int i, int j){int temp =a[i];a[i] = a[j];a[j] = temp;}}

热点排行