码迷,mamicode.com
首页 > 编程语言 > 详细

八皇后,回溯算法

时间:2015-07-28 12:17:47      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

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

  

八皇后,回溯算法

标签:

原文地址:http://www.cnblogs.com/zxahu/p/4682119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!