第十届蓝桥杯国赛B组试题E: 路径计数

从一个 5 x 5 的方格矩阵的左上角出发,沿着方格的边走,满足以下条件的路线有多少种?

  • 总长度不超过 12;
  • 最后回到左上角;
  • 路线不自交;
  • 不走出 5 x 5 的方格矩阵范围之外。

如下图所示,ABC 是三种合法的路线。注意 B 和 C 由于方向不同,所以视为不同的路线。


要求输出:这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

 题解思路:作为填空最后一个比较easy,板子dfs变通一下,注意开始的点不标记(因为要回到最开始的点,一旦标记就永远回不到原点),那么就会产生一个坑点:从开始点出发往右再往左这种路径是会被考虑在内的,但是不符合题意(重合肯定相交了),同理向下再向上也是如此,所以最终答案-2即可。

#include 
using namespace std;
int nextx[4] = {1, -1, 0, 0};
int nexty[4] = {0, 0, 1, -1};
bool book[6][6];
int cnt = 0;
void dfs(int x, int y, int step)
{
    if (x == 0 && y == 0 && step > 0 && step <= 12)
    {
        cnt++;
        return;
    }
    for (int i = 0; i < 4; i++)
    {
        int tx = x + nextx[i];
        int ty = y + nexty[i];
        if (tx > 5 || tx < 0 || ty < 0 || ty > 5)
        {
            continue;
        }
        if (!book[tx][ty])
        {
            book[tx][ty] = 1;
            dfs(tx, ty, step + 1);
            book[tx][ty] = 0;
        }
    }
}
int main()
{
    dfs(0, 0, 0);
    cout << cnt - 2 << endl; //注意减去2!!!
}

你可能感兴趣的:(蓝桥杯真题,dfs,蓝桥杯,dfs,1024程序员节)