首页 > 代码库 > 八皇后问题 回溯方法
八皇后问题 回溯方法
#include<iostream>using namespace std;//当前检测的行列 是否 符合条件 //从1行1列开始 bool check(int row,int col,int *list){ for(int i=1;i<row;i++) { if(col==list[i]) { return false; } else if(abs(row-i)==abs(list[i]-col)) { return false; } } list[row]=col; return true; }void queen(int n){ //回溯方法 int *array=new int[n+1]; memset(array,0,n+1); int k=1;//当前行 while(k>=1) { array[k]=array[k]+1;//检测该行下一列的点 while(!check(k,array[k],array)&&array[k]<=n) { array[k]=array[k]+1; //若不符合就将该行的检测值一直右移 } //若改点符合 if(array[k]<=n&&k==n) { for(int i=1;i<=n;i++) { cout<<array[i]<<" "; } cout<<endl; } else if(array[k]<=n&&k<n) { k=k+1; } else { array[k]=0; k=k-1; } }}int main(){ queen(20); getchar(); return 0;}
八皇后问题 回溯方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。