当前位置:编程学习 > C/C++ >>

经典回溯问题----n皇后

n皇后问题不用多说,基本都知道。回溯算法也不用多说,还是比较简单的,给我的感觉就是不停的找一颗子树或一个排列,并加上判断以回溯。
 
 
<span style="font-size:18px">/* 
*   经典回溯问题-----n皇后 
*/  
  
#include<iostream>  
using namespace std;  
  
#define MAX 1024  
  
int N;  
int column[MAX];//每行对应的列值  
  
int sum=0;  
bool Place(int row,int col)//判断是否该行可以放置皇后  
{  
    int i=1;  
    for(i;i<row;i++)  
    {  
        if((column[i]-col)==(i-row)||(column[i]-col)==(row-i)||column[i]==col)  
            return false;  
    }  
    return true;  
}  
  
void backTrace(int k)//回溯函数  
{  
    int i;  
    if(k>N)  
    {  
        cout<<"路径"<<++sum<<"序列为: ";  
        for(i=1;i<=N;i++)  
            cout<<column[i]<<" ";  
        cout<<endl;  
    }  
    else  
    {  
        for(i=1;i<=N;i++)  
        {  
            if(Place(k,i))  
            {  
                column[k]=i;  
                backTrace(k+1);  
            }  
        }  
    }  
}  
void main()  
{  
    cout<<"输入皇后数:";  
    cin>>N;  
    backTrace(1);  
}</span>  

 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,