下棋(深度搜尋)

2021-10-25 20:09:14 字數 847 閱讀 3519

下棋

題目描述

給出乙個棋盤,任意兩個棋子不能放在同一行或者同一列,問共有多少種方法。

輸入格式

第一行是兩個正整數,n k,用乙個空格隔開,表示了將在乙個n*n的矩陣內描述棋盤,以及擺放棋子的數目。 n <= 8 , k <= n

隨後的n行描述了棋盤的形狀:每行有n個字元,其中 # 表示棋盤區域(可放置), . 表示空白區域(不可放置)

(資料保證不出現多餘的空白行或者空白列)。

輸出格式

對於每一組資料,給出一行輸出,輸出擺放的方案數目c。

樣例輸入

2 1#.

.#4 4

…#…#.

.#…#…

樣例輸出21

#include

#include

using

namespace std;

const

int max=10;

char a[max]

[max]

;int vis[max]

;int n,k,ans;

void

dfs(

int x,

int cnt)

//x:第x層,cnt:還剩多少棋子要放

if(x==n)

return

;for

(int i=

0;i(vis[i]

==false

&&a[x]

[i]==

'#')

dfs(x+

1,cnt);}

intmain()

return0;

}

蒜頭君下棋

蒜頭君下棋 共一行,兩個整數nn和mm 1 leq n m leq 10001 n,m 1000 代表棋盤一共有 nn 行 mm 列。輸出乙個整數,代表棋盤上最多能放的馬的數量。樣例輸入1複製 2 4樣例輸出1複製 4樣例輸入2複製 3 4樣例輸出2複製 6 1 當棋盤只有一行時,棋盤上全放上棋子即...

搜尋 深度搜尋 廣度搜尋

迷宮 題目描述 一天extense在森林裡探險的時候不小心走入了乙個迷宮,迷宮可以看成是由n n的格點組成,每個格點只有2種狀態,和 前者表示可以通行後者表示不能通行。同時當extense處在某個格點時,他只能移動到東南西北 或者說上下左右 四個方向之一的相鄰格點上,extense想要從點a走到點b...

深度搜尋和廣度搜尋

這篇部落格很早之前就寫好了,但是一直沒有發出來。在進行詳細解說之前,我們需要先借用圖的概念,圖就是由一些小圓點 稱為頂點 和連線這些小圓點的直線 稱為邊 組成的。如下圖是由5個頂點 1,2,3,4,5 和5 條邊 1 2,1 2,1 4,2 5,3 4 組成的。現在我們從一號頂點開始遍歷這個圖,使用...