一直都害怕搜尋,,不知道為什麼(明明那麼好用==),然後試探地敲一敲,然後就過了。別怕啊啊啊然後這題用的是dfs
開始想的是能不能用bfs 寫呢?因為bfs比較簡單,又好想,然後又沒有遞迴,直接乙個
佇列,四個方向,能走的就進隊,最後第乙個出來的,出來進去就好了嘛。但是在寫的時候,要不要標記陣列?要的話,那第一種情況走的,第二種情況就不能走了,若第二種路徑才是正確的呢,那怎麼辦?不要的話,走回頭路怎麼辦?
所以就很自然地想到用dfs,對乙個點開始搜的時候,如果不符合的話,vis陣列會恢復為0。不用擔心下一種情況不能走,和走回頭的問題。這裡還有乙個點,就是如果我想,找到 第乙個符合的值我就跳出這個函式的話,怎麼辦呢?直接乙個return?那樣的話,會出來所有的解。怎麼辦呢,就是直接在 if(dfs()) return 1;就好啦
因為這個題的資料比較水,然後我就找到乙個值,跳出就正確了。還沒有判斷是不是最小的格仔數呢。如果要判斷的話,將值放到陣列中,取這個陣列的最小值就好了。
#include
#include
#include
#include
#include
#include
#include
//dfs better
using
namespace
std;
int v[15][15];
int vis[15][15];
int fy=;//右左下上
int fx=;
int sum=0,m,n;
int dfs(int x,int y,int total,int bs)
for(int i=0;i<4;i++)
}return0;}
int main()
}if(sum%2!=0) printf("0\n");
else
return
0;}
藍橋杯 歷屆試題 剪格仔 (dfs)
歷屆試題 剪格仔 時間限制 1.0s 記憶體限制 256.0mb 問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數...
藍橋杯歷屆試題 剪格仔 (DFS)
歷屆試題 剪格仔 時間限制 1.0s 記憶體限制 256.0mb 提交此題 錦囊1 錦囊2 問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的...
藍橋杯 歷屆真題解析 剪格仔
如下圖所示,3 x 3 的格仔中填寫了一些整數。我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。如果存在多種解答,請輸出包含左上角格仔的那個區域包含的格仔的最小數...