//https://blog.csdn.net/ryo_218/article/details/79640235 #include <iostream> #include <string> using namespace std; int num=0;int visit[7][7]; int direct[4][2]={1,0,0,-1,-1,0,0,1}; void dfs(int x,int y) { int i,dx,dy; if(x==0 || x==6 || y==0 || y==6)//该点在边界上 { num++;return ;} for(i=0;i<4;i++) { dx=x+direct[i][0];dy=y+direct[i][1];//注意此处dx,dy不能为x,y;不然下一方向就是依据更改过的(x,y)点 if(dx>-1 && dx<7 && dy>-1 && dy<7 && !visit[dx][dy]) { visit[dx][dy]=1;visit[6-dx][6-dy]=1; dfs(dx,dy); visit[dx][dy]=0;visit[6-dx][6-dy]=0; } } } void main() { memset(visit,0,sizeof(visit)); visit[3][3]=1; dfs(3,3); cout<<(num+4)/8<<endl;//上下左右,另外还有对称,两个对角线没有左右对称故需要加4 }