方格分割

6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。如图就是可行的分割法。
方格分割
试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。

思路:本来我的思路是枚举每个方格,从第一列枚举到第六列,方格加起来数为18个并且中心对称,后来发现此方法难以实现。

看了网上博主的解题方法,是从(3,3)开始割,找的是边,一条边就代表了一种分割方法。

再利用dfs具体代码如下:

#include<iostream>
using namespace std;
int N;
int book[7][7];
void dfs(int x, int y)
{
	if (x == 0 || x == 6 || y == 0||y == 6)
	{
		N++;
		return;
	}
	int next[4][2] = { {-1,0},{1,0},{0,-1},{0,1} };			//上下左右
	for (int k = 0; k < 4; k++)
	{
		int tx = x + next[k][0];
		int ty = y + next[k][1];
		if (book[tx][ty] == 0 || book[6 - tx][6 - ty] == 0)
		{
			book[tx][ty] = 1;
			book[6 - tx][6 - ty] = 1;
			dfs(tx, ty);
			book[tx][ty] = 0;
			book[6 - tx][6 - ty] = 0;
		}
	}
}
int main()
{
	book[3][3] = 1;
	dfs(3, 3);
	cout << N / 4 << endl;
	return 0;
}

答案:509

上一篇:迷宫问题(最短路+记录路径)


下一篇:1408D - Searchlights (思维、枚举)