#include <iostream>
#include <cstring>
using namespace std;
int visited[30][50]; //记录位置i,j是否被走过
int ways ( int i,int j,int n)
{
if( n == 0)
return 1; //一步都不用走
visited[i][j] = 1; //起点位置标记走过i,j了
int num = 0; //几种走法
if( ! visited[i][j-1] ) //西边的方格是否能走
num+= ways(i,j-1,n-1);
if( ! visited[i][j+1] ) //东
num+= ways(i,j+1,n-1);
if( ! visited[i+1][j] ) //北
num+= ways(i+1,j,n-1);
visited[i][j] = 0; //这里很重要,对于不同的路来说,方格可以重复走,只是对于同一条路来说,方格不可以重复
return num;
}
int main()
{
int n;
cin >> n;
memset(visited, 0, sizeof(visited));//所有的方块都没有走过
cout << ways(0, 25, n) << endl; //挑一个起点
return 0;
}
踩方格--深搜
最新推荐文章于 2022-02-10 18:22:46 发布