本題為回溯法解題,格仔可以向上,向下,向左,向右四種方向,當不滿足左邊格仔和是total/2時,剪枝。
注意,回溯法要設定vis陣列來記錄是否被訪問過,否則無限遞迴。
#include#includeusing namespace std;
int m,n,total,sum=0;
int g[10][10];
int vis[10][10];
int ans=100;
void f(int i,int j,int sum,int cnt)
vis[i][j]=1;
if(i+1<=n-1&&vis[i+1][j]==0) f(i+1,j,sum+g[i][j],cnt+1);
if(i-1>=0&&vis[i-1][j]==0) f(i-1,j,sum+g[i][j],cnt+1);
if(j+1<=m-1&&vis[i][j+1]==0) f(i,j+1,sum+g[i][j],cnt+1);
if(j-1>=0&&vis[i][j-1]==0) f(i,j-1,sum+g[i][j],cnt+1);
vis[i][j]=0;
}int main()
} f(0,0,0,0);
if(ans==100)
cout<
else
cout<
return 0;
}
藍橋杯 歷屆真題之剪格仔(dfs)
一直都害怕搜尋,不知道為什麼 明明那麼好用 然後試探地敲一敲,然後就過了。別怕啊啊啊然後這題用的是dfs 開始想的是能不能用bfs 寫呢?因為bfs比較簡單,又好想,然後又沒有遞迴,直接乙個 佇列,四個方向,能走的就進隊,最後第乙個出來的,出來進去就好了嘛。但是在寫的時候,要不要標記陣列?要的話,那...
C 藍橋杯 剪格仔 2013真題 爆搜
如題 將矩陣剪成相連的兩個聯通塊,可以有環,使得兩部分權值和相等 資料範圍矩陣 10x10,權值和 1000000 我尋思著覺得複雜度不對啊?自己卡個資料都會t,題目的資料太水了 dfs是錯誤寫法,對於不滿足從 1,1 開始的一筆完成的影象,就會出錯 例如 2 2 1 1 1 3 答案是 3 而普通...
剪格仔 藍橋杯
問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數,是否可以分割為兩個部分,使得這兩個區域的數字和相等。如果存在多種...