首页 > 学院 > 开发设计 > 正文

走迷宫

2019-11-08 19:48:47
字体:
来源:转载
供稿:网友

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 种走法。

Example Input

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

Example Output

1
0
4
 
#include<stdio.h>#include<string.h>#include<stdlib.h>#define max 7int book[max][max];int df[max][max];int count,n,m;void dfs(int x,int y){    int i,tx,ty;    if(x==n&&y==m)    {        count++;        return ;    }    int next[4][2]={{-1,0},{0,1},{1,0},{0,-1}};    for(i=0;i<4;i++)    {        tx=x+next[i][0];        ty=y+next[i][1];        if(tx<1||tx>n||ty<1||ty>m)            continue;        if(df[tx][ty]!=1&&book[tx][ty]==0)        {            book[tx][ty]=1;            dfs(tx,ty);            book[tx][ty]=0;        }    }}int main(){    int t,i,j;    scanf("%d",&t);    while(t--)    {        count=0;        scanf("%d%d",&n,&m);        for(i=1;i<=n;i++)        {            for(j=1;j<=m;j++)            {                scanf("%d",&df[i][j]);            }        }        book[1][1]=1;        dfs(1,1);        printf("%d/n",count);    }    return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表