1 条题解

  • 1
    @ 2024-10-31 17:00:54
    #include<iostream>
    using namespace std;
    
    int n;
    
    bool cow[1000];
    //hang
    bool diag1[1000];
    bool diag2[1000];
    //对角线
    int arr[10000];
    int count = 0;
    
    void dfs(int coww, int cnt) {
    	if (cnt == n) {
    			
    		if (count < 3) {
    			for (int i = 1; i <= n; i++) {
    				cout << arr[i] << " ";
    			}
    			cout << endl;
    		}
    		count++;
    		return ;
    	}
    	//对于对角线问题 很像 当初写div3的B
    	//我们定义了个K k每次加1 我们让x和y加k
    	//在此不是同理 我们x和y一起加i 判断是否为0
    	//这个i同时代表了列数 就像打印一样
    	//左边的对角线也就是11 22 33 我们列数减行数 就可以表示 副对角线是x+y
    	//加n防止负数 re 没必要开二维
    	for (int i = 1; i <= n; i++) {
    		if (cow[i] == 0 && diag1[coww - i + n] == 0 && diag2[coww + i] == 0) {
    			arr[coww] = i;
    			cow[i] = diag1[coww - i + n] = diag2[coww + i] = 1;
    			dfs(coww + 1, cnt+1);
    			cow[i] = diag1[coww - i + n] = diag2[coww + i] = 0;
    		}
    	}
    }
    int main() {
    	cin >> n;
    	dfs(1, 0);
    	cout<<count<<endl;
    	return 0;
    }
    看到没有贴一个
    
    • 1

    信息

    ID
    751
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    90
    已通过
    22
    上传者