8皇后问题

来源:互联网 发布:bilibili mac 编辑:程序博客网 时间:2024/06/09 15:36

代码如下:

import java.util.ArrayList;public class EightQueue {/** * 由于每行必有一个皇后,所以在dfs时,只考虑,将这个行的皇后放到列的哪个位置;否则会出现重复现象 */private static ArrayList<Float> ylist,pointlist1,pointlist2;private static int time=0;public static void main(String[] args) {// TODO 自动生成的方法存根ylist=new ArrayList<Float>();pointlist1=new ArrayList<Float>();pointlist2=new ArrayList<Float>();dfs(1);System.out.println(time);}private static void dfs(float amount) {// TODO 自动生成的方法存根if(amount>8){return;}for(float j=1;j<=8;j++){if(check(j,ylist)){ylist.add(j);if(check(reckon(j,amount,1),pointlist1)&&check(reckon(j,amount,-1),pointlist2)){//放置第8个时条件都符合,情况数+1if(amount==8){time++;}pointlist1.add(reckon(j,amount,1));pointlist2.add(reckon(j,amount,-1));dfs(amount+1);pointlist1.remove(pointlist1.size()-1);pointlist2.remove(pointlist2.size()-1);}ylist.remove(ylist.size()-1);}}}private static float reckon(float x,float y,int flag){float b1=0;if(flag==1){b1=y-x;}else if(flag==-1){b1=y+x;}return b1;}//not contain i return true ,or return falseprivate static boolean check(float i, ArrayList<Float> list2) {// TODO 自动生成的方法存根int len=list2.size();if(len==0){return true;}for(int p=0;p<len;p++){if(i==list2.get(p)){return false;}}return true;}}


原创粉丝点击