Leetcode-N-Queens II

Follow up for N-Queens problem.

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

這裏寫圖片描述

題意:對於一個n皇后問題,返回解的個數
解題思路:基於N-Queens,這個II版的反而更簡單,記錄解的個數並返回即可。

bool iv(vector<int> v,int k)//判斷當前皇后是否與之前已經放好的皇后衝突,因爲已經決定了1行只放一個,所以只需要判斷是否在同一列以及是否在斜線即可。
    {
        for(int i=1;i<k;++i)
        {
            if(v[i]==v[k])
            {
                return false;
            }
            double xt=k-i;
            double yt=v[i]-v[k];
            double xy=yt/xt;//斜線的斜率爲-1或1
            if(xy==1||xy==-1)
            {
                return false;
            }
        }
        return true;
    }
    void sq(int k,int n,vector<int>& v,int& num)
    {
            for(int j=1;j<=n;++j)
            {
                v[k]=j;
                if(iv(v,k))
                {
                        if(k==n)
                        {
                            num++;
                        }
                       else
                       {
                           sq(k+1,n,v,num);
                       }
                }
                else
                {
                    v[k]=0;
                }
            }
    }

    int totalNQueens(int n) {
        vector<int> v(n+1,0);
        int num=0;
        sq(1,n,v,num);
        return num;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章