方格分割题目链接
问题描述
【题目描述】
【输出】
题目解析
可以使用dfs深度优先搜索+逐步回溯的方法找到最后答案。
C++代码
#include<bits/stdc++.h>
using namespace std;
int ans;
int dire[4][2] = {-1,0,1,0,0,-1,0,1}; //代表上下左右四个方向
int vis[7][7]; //代表该点是否被访问过
void dfs(int x,int y)
{
if(x==0||x==6||y==0||y==6)
{
ans++;
return;
}
vis[x][y] = 1;
vis[6-x][6-y] = 1; //关于中心对称点也设置为已访问
for(int k=0;k<4;k++)
{
int nx = x + dire[k][0];
int ny = y + dire[k][1];
if(nx<0||nx>6||ny<0||ny>6) continue;
if(!vis[nx][ny]) dfs(nx,ny);
}
vis[x][y] = 0; //回溯
vis[6-x][6-y] = 0;
}
int main()
{
dfs(3,3);
cout<<ans/4<<endl;
return 0;
}