八皇后問題的錯誤程式碼示範

你要看看太陽發表於2020-09-29
#include<cmath>
#include<algorithm>
#include<cstdio>
#define max(a,b) a>b?a:b
#define min(a,b) a<b?a:b
typedef long long ll;
using namespace std;
int  l[14] = { 0 }, r[14] = { 0 }, d1[29] = {0}, d2[29] = { 0 };
int a[14], b[14],n,ans=0;
void dfs(int step) {
	if (step > n) {
	
		ans++;
		if (ans <= 3) {
		
			for (int i = 1; i <= n; i++)
				cout << a[i] << " ";
			cout << endl;
		}return;
	}
	for(int i=1;i<=n;i++)
		for (int j = 1; j <= n; j++)
		{
			if ((!l[i]) && (!r[j]) && (!d1[i + j]) && (!d2[n + j - i]))
			{
				l[i] = 1; r[j] = 1; d1[i + j] = 1; d2[n + j - i] = 1; a[step] = j;
				dfs(step + 1);
				l[i] = 0; r[j] = 0; d1[i + j] = 0; d2[n + j - i] = 0;//八皇后問題,執行第一個答案後,跳到第五行,但是還以為是第四步,這樣就亂套了
			}
		}

}
int main() {
	
	cin >> n;
	dfs(1);
	cout << ans;
}pp
在這裡插入程式碼片

相關文章