基礎練習 2n皇后問題 (兩次DFS)
接下來n行,每行n個0或1的整數,如果一個整數為1,表示對應的位置可以放皇后,如果一個整數為0,表示對應的位置不可以放皇后。 輸出格式 輸出一個整數,表示總共有多少种放法。 樣例輸入 4
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1 樣例輸出 2 樣例輸入 4
1 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1 樣例輸出
0
問題分析:很簡單能想到的就是先把其中一個顏色的皇后排了,然後再排另一個顏色,這裡我假設先把黑皇后排列好,當黑皇后排列好厚再排列白皇后,每次白皇后排列好後計數就加1,而能想到排列的話一定用的事DFS,所以就是在黑皇后排好後再排白皇后也就是黑皇后DFS到最後一排後再巢狀一個白皇后的DFS
#include<stdio.h> #include<string.h> #include<iostream> using namespace std; int maze[10][10]; int bqueen[10]; //bqueen[i]表示第i的皇后所處的列數 int wqueen[10]; //同上 int Count = 0; int n; int wdfs(int row) { //同樣判斷(剛剛填充的第row-1行的皇后和之前的每一個比較 int check; for(int i=1; i<row-1; i++) { check = wqueen[row-1]-wqueen[i]; if (check==0 || check==row-1-i || -check==row-1-i) return 0; } //白皇后填充完畢,計數 if (row==n+1) { Count++; return 0; } for(int i=1; i<=n; i++) { if (maze[row][i]==1 && bqueen[row]!=i) { wqueen[row] = i; wdfs(row+1); } } } int bdfs(int row) { //判斷是否同列以及在對角線 int check; for(int i=1; i<row-1; i++) { check = bqueen[row-1]-bqueen[i]; //列數之差 if (check==0 || check==row-1-i || -check==row-1-i) //row-1-i位行數之差 return 0; } //黑皇后填充完畢 ,填充白皇后 if (row==n+1) { wdfs(1); return 0; } for(int i=1; i<=n; i++) { if (maze[row][i]==1) { bqueen[row] = i; bdfs(row+1); } } } int main() { scanf("%d",&n); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) scanf("%d",&maze[i][j]); memset(bqueen,0,sizeof(bqueen)); memset(wqueen,0,sizeof(wqueen)); bdfs(1); //先排黑皇后 printf("%d\n",Count); return 0; }
相關推薦
基礎練習 2n皇后問題 (兩次DFS)
問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式 輸入的第一行為一個整數n,表示棋盤
藍橋杯 PREV-9 大臣的旅費 (兩次DFS)
題意:求樹中最遠的兩個點的距離。 解題方案:第一遍dfs,任取一個點,找到離它最遠的點a,第二遍dfs,以a為起點,找到離a最遠的點b,ab即為樹中最遠的兩個點。證明:樹的直徑(最長路)的詳細證明。
藍橋杯之大臣的旅費(兩次dfs)
之間 NPU fin ble 過大 編號 http sample 題目 Description 很久以前,T王國空前繁榮。為了更好地管理國家,王國修建了大量的快速路,用於連接首都和王國內的各大城市。 為節省經費,T國的大臣們經過思考,制定了一套優秀的修建方案,使得任
(藍橋杯)基礎練習 2n皇后問題
我們先學習下經典案例中的八皇后問題接著學習2n皇后問題問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有
藍橋杯 基礎練習 2n皇后問題【DFS + 回溯】
時間限制:1.0s 記憶體限制:512.0MB 問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同
基礎練習 2n皇后問題 dfs
問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。 輸入格式
[Java] 藍橋杯BASIC-27 基礎練習 2n皇后問題
問題描述給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對
藍橋杯 VIP 基礎練習 2n皇后問題
基礎練習 2n皇后問題 時間限制:1.0s 記憶體限制:512.0MB 問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇
基礎練習 2n皇后問題 ——回溯法,貪心演算法
/*基礎練習 2n皇后問題問題描述 給定一個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少种放法?n小於等於8。輸
51Nod 1095 Anigram單詞 (兩次map)
一個單詞a如果通過交換單詞中字母的順序可以得到另外的單詞b,那麼定義b是a的Anigram,例如單詞army和mary互為Anigram。另:相同的2個單詞不算Anigram。現在給定一個字典,輸入Q個單詞,從給出的字典中找出這些單詞的Anigram。 收起 輸入 第1行:1個數N,表示
1111 Online Map (30 分)(兩次dij)
1111 Online Map (30 分) Input our current position and a destination, an online map can recommend several paths. Now your job is to recommend two pat
Silver Cow Party(兩次Dijstra)
Silver Cow Party One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1…N is going to attend the big cow party to be held at farm #
UVA11624 Fire! (兩次BFS) 讀懂題意很重要
題目:https://uva.onlinejudge.org/index.phpoption=com_onlinejudge&Itemid=8&page=show_problem&problem=2671題意:就是迷宮著火了,火勢會蔓延,Joe要逃跑,
傳輸中文的亂碼的原因及解決方式(兩次encodeURI())轉碼;
.encodeURL函式主要是來對URI來做轉碼,它預設是採用的UTF-8的編碼. . UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進位制的編碼,同時新增上%號. 假設頁面端輸入的中文是一個 “中”,按照下面步驟進行解碼 1.第
筆試演算法題--股票買賣問題(兩次買賣)
題目:一個人一天只能進行最多兩次買和兩次賣,並且只有賣了才能繼續買。問一天可以獲得的最大收益,要採用時間複雜度低的實現。 股票價格為:10,22,5,75,65,80.答案:87(10買,22賣,5買,80賣) 動態規劃解決方法:設定陣列dp[i][j]表示:prices[
uva 11624 大火蔓延的迷宮 Fire!(兩次bfs)
題目:一個平面迷宮中有一個人,迷宮中有些點起火了,火和人每個單位時間只能向相鄰的格子移動, 其中有一些空間被牆壁佔據,問這個人在不背或燒到的情況下,離開迷宮的最快時間。 思路是先用bfs預處理每個格子起火的時間,在來一次bfs走迷宮,入隊時判斷
POJ 1239 Increasing Sequences(經典的兩次dp)
style blank cnblogs open clu 一位 class blog 思路 http://poj.org/problem?id=1239 題意:給出一串序列,現在要添加逗號作為分隔符,使得序列是遞增序列,然後讓最後一個數盡量小,第一個數盡量大。 思
Spring3 Schedule Task之註解實現 (兩次起動Schedule Task 的解決方案)
什麽 empty task 文件中 註解 work lin schedule ask Spring3 Schedule Task之註解實現 (兩次起步Schedule Task 的解決方案)Spring3 Schedule Task之註解實現 (兩次啟動Schedule T
【NOIP2017練習】函數變換(DP,dfs)
col close gin const cnblogs max 題意 .cn for 題意: 思路: 極限步數大概不會超過30 1 const max=100000; 2 var dp:array[1..max,0..2]of longint; 3
hdu1828線段樹(兩次掃描+離散化)
for 掃描 方向 body 理解 upd sort 有序 ide 題目鏈接 求周長並,思路和註意事項與求面積並類似,我用了最簡單的思路,即x軸做一次線段樹,y軸做一次線段樹。 還有一種方法,只做一次線段樹,在做線段樹的同時求另一個方向的長度,大概的想法我知道,不過在左右區