#include<iostream>
#include<cmath>
#include<cstring>
#include<string.h>
#include<cstdlib>
#include<algorithm>
#include<sstream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
using namespace std;
int a[6][6];
int visit[6][6];
int ans;
void dfs(int i,int j,int num);
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int main()
{
visit[0][0]=1; //这个已访问标志不设置还真不行,因为你可能走0,0多次
dfs(0,0,12);
cout<<ans<<endl; //206
return 0;
}
void dfs(int i,int j,int num)
{
if(num<0||i+j>=7) //剪枝
{
return;
}
for(int k=0;k<4;k++)
{
int tempx=i+dir[k][0];
int tempy=j+dir[k][1];
if(tempx==0&&tempy==0&&num>=1&&num!=11) //num>=1表示我是走了11步再往前走一步就到达(0,0) 因为步数是限制在最多12步
{ //num!=11 这个地方是为了防止你只走了一步比如(0,0)到(0,1)然后就直接到(0,0)
ans++; //这个地方是为了防止你只走了一步比如(0,0)到(1,0)然后就直接到(0,0)
}
if(tempx<0||tempy<0||tempx>5||tempy>5||visit[tempx][tempy])
{
continue;
}
else
{
visit[tempx][tempy]=1;
dfs(tempx,tempy,num-1); //注意回溯
visit[tempx][tempy]=0;
}
}
return ; //这个return 要不要都行
}
以上为参考代码:我看到往上有答案是202和208 。
我看到一个B站视频是206感觉还是对的。
B站可视化路经计数 |