方格分割【藍橋杯真題】

標題:方格分割

6x6的方格,沿着格子的邊線剪開成兩部分。
要求這兩部分的形狀完全相同。

如圖:p1.png, p2.png, p3.png 就是可行的分割法。

試計算:
包括這3種分法在內,一共有多少種不同的分割方法。
注意:旋轉對稱的屬於同一種分割法。

請提交該整數,不要填寫任何多餘的內容或說明文字。

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
分析:當我們發現一道題用常規的方法很難解決時,就丟掉我們已經思考的思路,去開拓一種新的思路,尋找別的解決方案
此題如往常一樣去選格子,很顯然是非常難得一件事情,那我們不妨換一個思路,直接模仿剪刀的走向,爲了實現兩塊一樣的區域,我們可以用兩把剪刀從中間對稱的同時兩個方向剪,那怎麼模仿剪刀走向?還是回到DFS,怎麼同時剪?,我們搜一邊,同時標記對稱點即可。

#include<cstdio>
int mp[7][7];
bool vis[7][7];
int vir[4][2]={{-1,0},{0,-1},{1,0},{0,1}};//四個方向
int cnt; 
void dfs(int x,int y){
	if(x==0||y==0||x==6||y==6){//剪到邊了 
		cnt++;
		return ;
	}
	vis[x][y]=true; 
	vis[6-x][6-y]=true;//標記對稱點 
	for(int i=0;i<4;i++){
		int tx=x+vir[i][0];
		int ty=y+vir[i][1];
		if(tx>=0&&tx<7&&ty>=0&&ty<7&&!vis[tx][ty]){
			dfs(tx,ty);
			
		}
	}
	vis[x][y]=false;
	vis[6-x][6-y]=false;
} 
int main(){ 
	dfs(3,3);//從中間點開始搜素 
	printf("%d\n",cnt/4);//旋轉對稱屬於一個方法
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章