zoukankan      html  css  js  c++  java
  • 数据结构实验之栈与队列十:走迷宫

    Problem Description

    一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方向任意走一步,并且有些格子是不能走动,求从起点到终点经过每个格子至多一次的走法数。

    Input

           第一行一个整数T 表示有T 组测试数据。(T <= 110)

    对于每组测试数据:

    第一行两个整数n, m,表示迷宫有n * m 个格子。(1 <= n, m <= 6, (n, m) !=(1, 1) ) 接下来n 行,每行m 个数。其中第i 行第j 个数是0 表示第i 行第j 个格子可以走,否则是1 表示这个格子不能走,输入保证起点和终点都是都是可以走的。

    任意两组测试数据间用一个空行分开。

    Output

     对于每组测试数据,输出一个整数R,表示有R 种走法。

     

    Sample Input

    3
    2 2
    0 1
    0 0
    2 2
    0 1
    1 0
    2 3
    0 0 0
    0 0 0
    

    Sample Output

    1
    0
    4

    Hint

     

    Source

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int mp[110][110];
    int vis[110][110];
    int sum, n, m;
    
    void DFS(int x, int y)
    {
        if (x < 1|| y < 1|| x > n||y > m||mp[x][y] == 1)  // 判断边界条件
            return ;
        if (x == n&&y == m)  // 到达终点,可行路线+1,返回上一步
        {
            sum++;
            return ;
        }
        if (vis[x][y] == 0)  // 若当前道路不是来时路
        {                    
            vis[x][y] = 1;  // 标记当前位置
            DFS(x+1, y);  // 进行上下左右的搜索
            DFS(x, y+1);
            DFS(x-1, y);
            DFS(x, y-1);
            vis[x][y] = 0;  // 若四个方向搜索完毕,取消标记
        }
    }
    
    int main()
    {
        int t;
        scanf("%d", &t);
        while(t--)
        {
            scanf("%d%d", &n, &m);
            for (int i = 1; i <= n; i++)
            {
                for(int j = 1; j <=m; j++)
                {
                    scanf("%d", &mp[i][j]);
                }
            }
            sum = 0;
            DFS(1, 1);
            printf("%d
    ", sum);
        }
        return 0;
    }
  • 相关阅读:
    python3.7.6安装爬虫akshare
    linux执行crotab是python脚本不生效解决方案
    centos7安装smb共享目录
    搜索引擎集群安装7.8-head-ik
    npm更换阿里源
    nginx访问静态文件不下载,修改默认流下载
    jenkins通过证书ssh访问代码解决方法
    redis创建密码
    微信二次分享时缩略图及描述信息丢失
    redis安装使用
  • 原文地址:https://www.cnblogs.com/sugerandmaster/p/11538414.html
Copyright © 2011-2022 走看看