首页 > 其他 > 详细

八皇后问题 回溯方法

时间:2014-10-12 15:46:49      阅读:249      评论:0      收藏:0      [点我收藏+]
#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;
} 

 

八皇后问题 回溯方法

原文:http://www.cnblogs.com/Small-Life/p/4020536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!