簡單搜尋 dfs

2021-09-12 02:32:38 字數 1272 閱讀 1359

最近剛刷了幾套有關搜尋的題目,我也是初學者,沒什麼經驗,但我也想總結一番,讓自己再加固一下自己對新知識的了解,dfs主要講的是不斷地向下搜尋,用遞迴的方式自己呼叫自己,深搜直到到找出所有答案為止,當然遞迴這種方式是很難讓人理解的,看不清他是怎麼跑的這個迴圈,但我們靜下心來一步一步的去看,也是可以看懂的。

附一道題目:棋盤問題

在乙個給定形狀的棋盤(形狀可能是不規則的)上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。

input

輸入含有多組測試資料。 

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

當為-1 -1時表示輸入結束。 

隨後的n行描述了棋盤的形狀:每行有n個字元,其中 # 表示棋盤區域, . 表示空白區域(資料保證不出現多餘的空白行或者空白列)。 

output

對於每一組資料,給出一行輸出,輸出擺放的方案數目c (資料保證c<2^31)。 

sample input 

2 1

#..#

4 4...#

..#.

.#..

#...

-1 -1

sample output

#include#include#include#include#includeusing namespace std;

typedef long long ll;

const int maxn=1e6+5;

int dis[maxn];

char vis[110][110];

int n,k,sum=0;

void dfs(int p,int ans)

dis[i]=1;

dfs(p+1,ans+1);

dis[i]=0;

} }dfs(p+1,ans);

}int main()

getchar();

}dfs(1,0);

printf("%d\n",sum);

} }return 0;

}

簡單搜尋 DFS 棋盤問題

description 在乙個給定形狀的棋盤 形狀可能是不規則的 上面擺放棋子,棋子沒有區別。要求擺放時任意的兩個棋子不能放在棋盤中的同一行或者同一列,請程式設計求解對於給定形狀和大小的棋盤,擺放k個棋子的所有可行的擺放方案c。input 輸入含有多組測試資料。每組資料的第一行是兩個正整數,n k,...

搜尋剪枝DFS

tempter of the bone hdu1010 題意 給乙個圖,找出乙個看能否能在t的時間內從s到達d點 思路 bfs肯定不行,因為bfs找到的是最短時間的路徑,無法對在t時間點到達d點進行判斷 於是才想到了dfs,這個能把所有的情況遍歷一遍的演算法,雖然圖的長寬只有7,但是總是超時,這次終...

DFS搜尋 剪枝

hdu 5952 題意 給出一張無向圖,然後判斷這張圖中一共有多少個不同的大小為s的完全圖 完全圖的頂點數為s個 題目保證每個點的度不大於20。完全圖 n個點兩兩之間都有一條邊的圖叫完全圖。思路 由於頂點個數很少,而且每個點的度數最多是20,所以可以暴力優化,建圖,對於每個s點完全子圖,如果i點在子...