我的代码:
#include <cstdio>
using namespace std;
int n,m,ans = 0;
struct Point
{
int x,y;
} a[10005];
bool used[15][15];
int dx[4] = {1,1,2,2};
int dy[4] = {2,-2,1,-1};
void print(int k)
{
printf("<%d>(0,0)",ans);
for (int i = 1;i <= k;i++)
{
printf("-(%d,%d)",a[i].x,a[i].y);
}
printf("\n");
}
void dfs(int x,int y,int num)
{
if (x == n && y == m)
{
ans++;
print(num-1);
return;
}
for (int i = 0;i < 4;i++)
{
int ux = x+dx[i],uy = y+dy[i];
if (ux < 0 || uy < 0 || ux > n || uy > m) continue;
if (used[ux][uy]) continue;
used[ux][uy] = 1;
a[num] = (Point){ux,uy};
dfs(ux,uy,num+1);
used[ux][uy] = 0;
}
}
int main()
{
scanf("%d%d",&n,&m);
used[0][0] = 1;
dfs(0,0,1);
printf("%d\n",ans);
return 0;
}