public class Queue_8 { public int size = 4; //queue i can locate at (i,loc[i]) public int loc[] = new int[size+1]; // 求第k个元素,放置的位置, 与已经放过的皇后比较,如果它们在同一行或一列,或者在一条斜线上(斜线是根据横坐标和纵坐标的差值比较,如果在一条斜线上,横坐标差值就会等于纵坐标差值) public boolean place(int k){ int i; for(i=1;i<k;i++){ if(Math.abs(k-i) == Math.abs(loc[k]-loc[i]) || loc[i] == loc[k]){ return false; } } return true; } public void tracking(int t){ int i; if(t > size){ // 表示一次遍历结束,输出结果 for(i=1;i<size+1;i++){ System.out.print(loc[i]+" "); } System.out.println(""); //一次探索结束,返回到track(t)的位置,继续track(loc[t-1]+1)的位置是否符合要求 } else{ for(i=1;i<size+1;i++){ loc[t] = i; //如果loc[t][i]可以放皇后,则继续探索t+1列 if(place(t)){ tracking(t+1); } } } } public static void main(String args[]){ Queue_8 q = new Queue_8(); //从第1位开始 q.tracking(1); } }