寒武紀釋出新款 AI 訓練卡 MLU370-X8:7nm 工藝,48GB LPDDR5 記憶體
阿新 • • 發佈:2022-03-21
題目連結
題目思路
dfs搜尋,列舉每一行,查詢合法的位置
關鍵:正對角線用一維表示為 \(u + i\),反對角線為了不超範圍表示為 \(n - u + i\)
題目程式碼
#include <iostream> #include <algorithm> using namespace std; const int N = 110; int g[N][N]; bool row[N], dg[N], udg[N]; int n, cnt;; int dfs(int u) { if(u == n) { if(cnt < 3) { for(int i = 0; i < n; i ++ ) { for(int j = 0; j < n; j ++ ) if(g[i][j] == 1) cout << j + 1 << ' '; } puts(""); } cnt ++ ; return 0; } for(int i = 0; i < n; i ++ ) { if(!row[i] && !dg[u + i] && !udg[n - u + i ] && g[u][i] == 0) { g[u][i] = 1; row[i] = dg[u + i] = udg[n - u + i] = true; dfs(u + 1); g[u][i] = 0; row[i] = dg[u + i] = udg[n - u + i] = false; } } } int main() { cin >> n; dfs(0); cout << cnt << endl; return 0; }