基本的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 只...