把矩形分割转化成分割线条只要连通,就能使cnt++。由此来简化问题进行搜索。amazing。
#include<bits/stdc++.h>
using namespace std;
int a,b,cnt;
int run[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int vis[10][10];
void dfs(int x,int y)
{
if(x==0||y==0||x==a||y==b){cnt++;return ;}
else{
for(int i=0;i<4;i++)
{
int dx=x+run[i][0],dy=y+run[i][1];
if(vis[dx][dy]==0){vis[dx][dy]=1;dfs(dx,dy);vis[dx][dy]=0;}
}
}
}
int main()
{
cin>>a>>b;
for(int i=1;i<a;i++)
{
vis[i][0]=1;vis[i][1]=1;
dfs(i,1);
vis[i][0]=0;vis[i][1]=0;
}
for(int i=1;i<b;i++)
{
vis[0][i]=1;vis[1][i]=1;
dfs(1,i);
vis[0][i]=0;vis[1][i]=0;
}
cout<<cnt;
return 0;
}