码迷,mamicode.com
首页 > 其他好文 > 详细

八皇后问题 回溯方法

时间:2014-10-12 16:22:18      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:blog   io   os   ar   for   sp   div   问题   log   

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

 

八皇后问题 回溯方法

标签:blog   io   os   ar   for   sp   div   问题   log   

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

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