回溯法解决八皇后问题---用Java语言

    技术2022-05-20  74

    import java.lang.*;import java.util.*;

    class Queen { private int x; private int y;   public void setX(int x){   this.x=x; } public int getX(){  return x; } public void setY(int y){  this.y=y; } public int getY(){  return y; } }

    public class EightQueen { private static List<Queen> qlist = new ArrayList<Queen>(); private static List<Queen> finlist=new ArrayList<Queen>(); private static int qsize=8;

      public static void main(String[] args){   long start = System.nanoTime();   backTrack(1,1);   System.out.println("take time = "+(System.nanoTime()-start));   int n=0;   for(int i=0;i<finlist.size();i++){    if(i%qsize==0){     System.out.print((++n)+":");    }    Queen q=(Queen)finlist.get(i);    System.out.print(q.getX()+","+q.getY()+" ");    if((i+1)%qsize==0)     System.out.println();   }  }  public static boolean backTrack(int i,int j){/* 回溯法解决八皇后问题*/      for(;j<=qsize;j++){    boolean good=true;    Iterator<Queen> it= qlist.iterator();     while(it.hasNext()){     Queen q = (Queen)it.next();     int x=q.getX();     int y=q.getY();     if(i==x){      good=false;        break;       }     if(j==y){      good=false;      break;     }     if((j-y)==(i-x)||(j-y)==(x-i)){      good=false;      break;     }         }    if(good == true){     Queen queen = new Queen();     queen.setX(i);     queen.setY(j);     qlist.add(queen);     if(i==qsize){       Iterator<Queen> its=qlist.iterator();        while(its.hasNext()){        finlist.add((Queen)its.next());       }       qlist.remove(queen);//用remove(i-1)应该也行       qlist.remove(i-2);       return true;     }     backTrack(i+1,1);    }   }   if(i!=1){    qlist.remove(i-2);   }   return false; }

    }


    最新回复(0)