概述
import static java.lang.Math.abs; public class EightQueue { int[] x = new int[9]; static int sum = 0; public void queue(int n){ int i,k; for(i=1;i<=n;i++){ x[i]=0; } k=1; while(k>=1){ //如果回溯完,则k=0,循环结束。 x[k]=x[k]+1; //在下一列放置第k个皇后 while(x[k]<=n&&!place(k)){ x[k]=x[k]+1;//搜索下一列 } if(x[k]<=n&&k==n){//得到一个输出 sum++; for(i=1;i<=n;i++){ System.out.print(x[i]); } System.out.println(); }else if(x[k]<=n&&k<n){ k=k+1;//放置下一个皇后 }else { x[k]=0;//重置x[k],回溯 从第0列开始 k=k-1; } } } boolean place(int k)//考察皇后k放置在x[k]列是否发生冲突 { int i; for(i=1;i<k;i++) //i表示前1到k-1的每个棋子的比较 if(x[k]==x[i]||abs(k-i)==abs(x[k]-x[i])) return false; return true; } public static void main(String[] args) { int n= 8; EightQueue eightQueue = new EightQueue(); eightQueue.queue(n); System.out.println(sum); } }
回溯法,不懂的可以通过debug调试,查看其过程。
x[k]=0的目的是,每行棋子都是从第1列开始的。
x[k]的值表示,第k行的棋子放在第几列。
转载于:https://www.cnblogs.com/lchzls/p/7233567.html
最后
以上就是文艺寒风为你收集整理的八皇后问题--回溯法的全部内容,希望文章能够帮你解决八皇后问题--回溯法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复