52. N皇后 II

小小小楚楚發表於2020-12-19

52. N皇后 II

把解換成解的數量就可以了

class Solution {
public:
class dfs51 {
public:
	vector<vector<string>> result;
    int num=0;
	int N;	
	dfs51(int n) {
		N = n;
	}
	void dfs(int row,vector<string>& path,vector<bool>& isused,unordered_map<int, int>& coordinate) {
		if (row == N - 1) {
			result.push_back(path);
            num++;
			return;
		}
		//符合要求,看看下面一行的
		for (int i = 0; i < N; i++) {
			//看看能不能往這裡放
			//我想往 row+1 ,i 這一位置放,可以放的條件擺在if裡面了,同樣的也就是剪枝操作
			if (isused[i] == false && isXie(row + 1, i, coordinate)) {	//這一列沒人用,	//排除一下斜對角的
				isused[i] = true;		//沒人用我用了
				path[row + 1][i] = 'Q';	
				coordinate[row + 1] = i;
				dfs(row + 1, path, isused, coordinate);	//再去找下一行了啊
				path[row + 1][i] = '.';		//用完了還你
				isused[i] = false;
			}
		}
	}
	bool isXie(int x,int y, unordered_map<int, int>& coordinate) {
		for (int i = 0; i < x; i++) {
			if (abs(y - coordinate[i] )==abs( x - i))
				return false;
		}
		return true;
	}

};


    int totalNQueens(int n) {
	vector<bool> isused(n, false);
	dfs51 d(n);
	vector<string> path(n,string(n,'.'));
	unordered_map<int, int> coordinate;
	d.dfs(-1, path,isused, coordinate);

	return d.num;
    }
};

相關文章