分割线一定会经过图的中心点,只要能确定半条到达边界的分割线,就能根据这条分割线对称画出另外一条分割线,因为结果是中心对称的,所以将搜索出来的个数除以4即可
注意:半条分割线不能同时经过中心对称的两个点 ;
#include<iostream> #include<cstring> #include<algorithm> using namespace std ; int d[4][2] = {{-1,0},{0,1} ,{1,0} , {0,-1}}; bool v[10][10] ; int ans ; void dfs(int x ,int y ){ if(x == 0 || y == 0 || y == 6 || x == 6){//函数结束判断 ans ++ ;return ; } for(int i = 0 ; i < 4 ; i ++){//四个走向进行搜索 int tx = x + d[i][0] , ty = y + d[i][1] ; if(!v[tx][ty]){//未走过进入判断 v[tx][ty] = 1 ; v[6-tx][6-ty] = 1;//不能经过中心对称的两个点 dfs(tx,ty) ; v[6-tx][6-ty] = 0; v[tx][ty] = 0 ; } } } int main(){ v[3][3] = 1 ; dfs(3,3) ; cout << ans / 4 << endl ;; }