首页 > 代码库 > 八皇后问题 回溯方法

八皇后问题 回溯方法

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

 

八皇后问题 回溯方法