八皇后,回溯算法

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);
	}
}

  

    原文作者:八皇后问题
    原文地址: https://www.cnblogs.com/zxahu/p/4682119.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞