磁磚樣式 另一種思路的dfs

2021-09-22 01:31:16 字數 900 閱讀 4610

基本的dfs搜尋一般都是直接從乙個點出發,再從這個點到下乙個

但是這題使用了另一種思路的dfs

每次選擇點不是根據上乙個點來推進,而是從整個地圖中選擇沒有選過的點

也就是掃瞄一遍地圖,從中選擇還沒有使用過的點,這種方式往往用於兩個點之間的轉移規則比較複雜的情況,比如這題,每次需要使用兩個點,而不是乙個,同時有橫豎兩種方向。

使用這種方式時需要注意在找到第乙個點之後需要立即return。

#include #include #include using namespace std;

using namespace __gnu_cxx;

//#pragma gcc optimize(2)

#define n 3

#define m 10

int map[3][10];

bool check(void)

}return true;

}setans;

string tmp;

void dfs(int count)

}tmp += ch;

if(check() && ! ans.count(tmp))

return;

}for(int i = 0; i < n; i++)

if(j+1 < m && map[i][j+1] == 0)

if(i+1 < n && map[i+1][j] == 0)

if(i+1 < n && map[i+1][j] == 0)

return ; // 注意,一定要加上,避免重複計算}}

}}#define zpl

int main(int argc, char *ar**)

選擇排序的另一種思路

在我們上次的選擇迴圈中,我們用了乙個minindex變數來儲存最小值的下標,每次迴圈完畢後用最小值下標的元素與手元素進行交換,遍歷一次,記錄下最值元素所在位置,遍歷結束後,將此最值元素調整到合適的位置。但是我們還有種交換變數的方式,我們可以用待排序陣列中的元素與待排序序列中的首元素比較,如果比待排序...

詳解KMP演算法 另一種思路

這個演算法單純從 理解起來比較費勁.我覺得從思路上理解是非常簡單的.傳統演算法的劣勢很容易察覺.那就是會有重複的匹配過程.我們假定 text為待查文字,pattern 為匹配串.text aaaab pattern ab 按以下傳統演算法.則直到迴圈到最後一次比較.才找到 ab 而前面很多迴圈都是做...

全域性變數的另一種思路

為了程式的可讀性和邏輯性,有時候喜歡用單獨的.h檔案定義所有的全域性變數。有時候我們會想,在grobalpar.h中定義所有的全域性變數,然後其他cpp檔案 include grobalpar.h 就ok了,這種想法大錯特錯!這樣做會出現重複定義的錯誤 提示很多很多變數都重複定義 如下 注意 1 只...