• 数据结构实验之栈:走迷宫



    走迷宫

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

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

    输入

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

    对于每组测试数据:

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

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

    输出

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

    示例输入

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

    示例输出

    1
    0
    4

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #define maxn 10
     5 int map[maxn][maxn],vis[maxn][maxn],n,m,k;
     6 void BFS(int u,int v)
     7 {
     8     int x,y;
     9     int a[]= {0,0,-1,1},b[]= {-1,1,0,0};
    10     for(int i=0; i<4; i++)
    11     {
    12         x=u+a[i];
    13         y=v+b[i];
    14         if(x==n && y==m)
    15             k++;
    16         else if(x<=n && x>0 && y<=m && y>0)
    17         {
    18             if(!map[x][y] && !vis[x][y])
    19             {
    20                 vis[x][y]=1;
    21                 BFS(x,y);
    22             }
    23         }
    24     }
    25     vis[u][v]=0;//vis[u][v]的值在上面的循环中可能会改变,所以要清零。
    26 }
    27 int main()
    28 {
    29     int T;
    30     scanf("%d",&T);
    31     while(T--)
    32     {
    33         k=0;
    34         int i,j;
    35         memset(map,0,sizeof(map));
    36         memset(vis,0,sizeof(vis));
    37         scanf("%d%d",&n,&m);
    38         for(i=1; i<=n; i++)
    39             for( j=1; j<=m; j++)
    40                 scanf("%d",&map[i][j]);
    41         vis[1][1]=1;
    42         BFS(1,1);
    43         //验证输出
    44        /* for(i=1;i<=n;i++)
    45         {
    46             for(j=1;j<=m;j++)
    47         printf("%d ",vis[i][j]);
    48         printf("
    ");
    49         }*/
    50         printf("%d
    ",k);
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    SpinLock 实现
    支持正则或通配符的hashmap
    HTTP报文
    Protostuff序列化
    【转】轻量级分布式 RPC 框架
    Servlet 3特性:异步Servlet
    Web服务器的工作原理
    《恰如其分的软件架构:风险驱动的设计方法》——读书笔记
    Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)
    Java Socket常见异常处理 和 网络编程需要注意的问题
  • 原文地址:https://www.cnblogs.com/kuangdaoyizhimei/p/3224723.html
Copyright © 2020-2023  润新知