問題描述
給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。
輸入格式
輸入的第一行為乙個整數n,表示棋盤的大小。
接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,如果乙個整數為0,表示對應的位置不可以放皇后。
輸出格式
輸出乙個整數,表示總共有多少種放法。
樣例輸入
41 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
樣例輸出
2樣例輸入
41 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
樣例輸出
0分析:和n皇后問題一樣,只不過2n皇后要用兩個深度優先搜尋。
呼叫放置白皇后的遞迴dfs,先放置白皇后,當每乙個白皇后放置成功之後,在遞迴的return語句之前,
新建乙個棋盤,複製原來的棋盤後並把放置了白皇后的位置置為0,呼叫擺放黑皇后的深度優先搜尋。
當黑皇后也找到相應的解法後,cnt++; 最後輸出cnt的值。
#include #include #include using namespace std;
int cnt = 0;
bool issafe(vector> pic, vectorpos, int row)
return true;
}void blackdfs(vector> blackpic, vectorblackpos, int n, int blackrow)
for(blackpos[blackrow] = 0; blackpos[blackrow] < n; blackpos[blackrow]++)
}}void dfs(vector> pic, vectorpos, int n, int row)
}for(int i = 0; i < n; i++)
vectorblackpos(n);
blackdfs(blackpic, blackpos, n, 0);
return ;
}for(pos[row] = 0; pos[row] < n; pos[row]++)
}}int main()
}dfs(pic, pos, n, 0);
cout << cnt;
return 0;
}
藍橋杯基礎練習basic 2
問題描述 利用字母可以組成一些美麗的圖形,下面給出了乙個例子 abcdefg babcdef cbabcde dcbabcd edcbabc 這是乙個5行7列的圖形,請找出這個圖形的規律,並輸出乙個n行m列的圖形。輸入格式 輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。輸出格式 ...
藍橋杯 BASIC 17 基礎練習 矩陣乘法
問題描述 給定乙個n階矩陣a,輸出a的m次冪 m是非負整數 例如 a 1 23 4 a的2次冪 7 10 15 22 輸入格式 第一行是乙個正整數n m 1 n 30,0 m 5 表示矩陣a的階數和要求的冪數 接下來n行,每行n個絕對值不超過10的非負整數,描述矩陣a的值 輸出格式 輸出共n行,每行...
藍橋杯 BASIC 21 基礎練習 Sine之舞
問題描述 最近fj為他的奶牛們開設了數學分析課,fj知道若要學好這門課,必須有乙個好的三角函式基本功。所以他準備和奶牛們做乙個 sine之舞 的遊戲,寓教於樂,提高奶牛們的計算能力。不妨設an sin 1 sin 2 sin 3 sin 4 sin n sn a1 n a2 n 1 a3 2 an ...