0
点赞
收藏
分享

微信扫一扫

N-Queens II 回溯法求八皇后


N-Queens II



Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.



Hide Tags

 

Backtracking


Hide Similar Problems

 

(H) N-Queens


class Solution {
public:
    int sum;
    
    int totalNQueens(int n) {
        
        int *a=new int[n];
        memset(a,0,sizeof(a));
        sum=0;
        solve(a,n,0);
        return sum;
        
    }
    
    void solve(int *a,int n,int index)
    {
        
        for(int i=0;i<n;i++)
        {
            if(isValid(a,n,index,i))
            {
                a[index]=i;
                if(index==n-1)
                {
                    sum++;
                    a[index]=0;
                    return ;
                }
                solve(a,n,index+1);
                a[index]=0;
            }
        }
    }
    
    bool isValid(int *a,int n,int x,int y)
    {
        int col;
        for(int i=0;i<x;i++)
        {
            col=a[i];
            if(y==col)
                return false;
            if(y-col==x-i)
                return false;
            if(y-col==i-x)
                return false;
        }
        return true;
    }
};


举报

相关推荐

0 条评论