题目描述
从一个 5×5 的方格矩阵的左上角出发,沿着方格的边走,满足以下条件的路线有多少种?
- 总长度不超过 12;
- 最后回到左上角;
- 路线不自交;
- 不走出 5×5 的方格矩阵范围之外。 如下图所示,ABCABC 是三种合法的路线。注意 BB 和 CC 由于方向不同,所以 视为不同的路线。
答案为202
解题思路:从左上角出发,dfs出所有能回到左上角的路径,用s计数,路径超过12的不计
代码如下
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int a[10][10];
int s=0;
int b[4][4]={{-1,0},{1,0},{0,-1},{0,1}};
void dfs(int x,int y,int c){//x,y表示坐标,c表示走的路径长度
int i;
if(c>12){//不满足题目的要求了,结束
return ;
}
if(x==0&&y==0&&c>2){//回到了起点,c>2排除起点
s++;
return ;
}
for(i=0;i<4;i++){
int j,k;
j=x+b[i][0];
k=y+b[i][1];
if(j<0||j>4||k<0||k>4||a[x][y]) continue;//越界和走过的
a[x][y]=1;
dfs(j,k,c+1);
a[x][y]=0;
}
}
int main()
{
memset(a,0,sizeof a);
dfs(0,0,0);
cout<<s;
return 0;
}