演算法學習之路|方格分割
6×6的方格,沿著格子的邊線剪開成兩部分。
要求這兩部分的形狀完全相同。
試計算:
包括這3種分法在內,一共有多少種不同的分割方法。
注意:旋轉對稱的屬於同一種分割法。
請提交該整數,不要填寫任何多餘的內容或說明文字。
解題思路:
首先建立一個模型:即從(3,3)開始一刀切,有多少種切法
應用演算法:深度遍歷/回溯
小技巧:
切痕為1,沒切的地方為0.
切過就無法再次切了,即遇到1回溯,遇到0就遍歷。
當成蝸牛型環路的時候因為最後四個方向都是1,所以一直回溯到出環路,這個問題無需考慮.
//方格分割
//暴力破解
#include <iostream>
using namespace std;
void dfs(int line,int column);
int times=0;
int map[7][7]={0};
int main(){
dfs(3,3);
cout<<times/4<<endl;//因為一開始(3,3)從四個方向出發,從一個方向深搜的結果與其他方向是相同的,只不過角度不同罷了。
return 0;
}
void dfs(int line,int column){
if(map[line][column]==1) return;//深度搜尋的時候防止返回原路並且保持圖片被一刀切兩半
map[6-line][6-column]=1;//對稱型切法
map[line][column]=1;//標記已經切開的路線
if(line==0||column==0||column==6||line==6){//當與邊界相撞的時候,即是一刀切開成功的時候
times++;
map[6-line][6-column]=0;
map[line][column]=0;//回溯
return ;
}
dfs(line-1,column);
dfs(line,column-1);
dfs(line+1,column);
dfs(line,column+1);//各種情況
map[6-line][6-column]=0;
map[line][column]=0;//回溯
}
相關文章
- 演算法學習之路|划拳演算法
- 演算法學習之路|A除以B演算法
- 演算法學習之路|列印排名演算法
- 演算法學習之路|朋友數演算法
- 演算法學習之路|SpellItRight演算法
- 演算法學習之路|歐幾里得遊戲演算法遊戲
- 演算法學習之路|月餅演算法
- 演算法學習之路|PATRanking演算法
- 演算法學習之路|列印沙漏演算法
- 演算法學習之路|快速排序演算法排序
- 演算法學習之路|結繩演算法
- 演算法學習之路|數零壹演算法
- 演算法學習之路|開學寄語演算法
- 演算法學習之路|說反話演算法
- 演算法學習之路|幼兒園買玩具演算法
- 演算法學習之路|小賭怡情演算法
- 演算法學習之路|影像過濾演算法
- 演算法學習之路|日期問題演算法
- 演算法學習之路|賣個萌演算法
- 演算法學習之路|螺旋矩陣演算法矩陣
- 演算法學習之路|選擇題演算法
- 演算法學習之路|字元統計演算法字元
- 演算法學習之路|科學計數法演算法
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- 演算法學習之路|舊鍵盤打字演算法
- 演算法學習之路|最簡分數演算法
- 演算法學習之路|檢驗身份證演算法
- 演算法學習之路|愛丁頓數演算法
- 分治演算法-骨牌鋪方格演算法
- 演算法學習之路|最小生成樹——prime演算法演算法
- 強化學習之路一 QLearning 演算法強化學習演算法
- 演算法學習之路|個位數統計演算法
- 演算法學習之路|狀態壓縮dp演算法
- 演算法學習之路|棋盤問題(博弈)演算法
- 演算法學習之路|進位制轉換演算法
- 演算法學習之路|宇宙無敵加法器演算法
- 演算法學習之路|四平方和演算法
- 演算法學習之路|寫出這個數(20)演算法