xjoi 1543 走迷宫

xjoi 1543 走迷宫

描述

给定一个迷宫。在迷宫中有一些障碍物无法通过,请计算出从左上角到右下角的移动方案总数。(一个位置不能经过两次,只能上下左右四个方向走)

输入格式

第一行包含两个整数n,m,表示迷宫的大小。1 <= N,M<= 6

接下来的n行,每行包含m个字符,代表迷宫。

#代表障碍

*代表你可以去的位置

左上角和右下角用“*”表示

输出格式

 

一个整数。

 

样本输入1

5 6
*****#
*###*#
*###*#
*###*#
******

样本输出1

2

样本输入2

6 6
******
******
******
******
******
******

示例输出2

1262816
#include<bits/stdc++.h>
using namespace std;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int n,m,s=0;
bool vis[10][10];
char a[10][10];
int dfs(int x,int y){
    if(x==n&&y==m){
        s++;
    }
    else{
        for(int i=0;i<=3;i++){
            int nx=x+dx[i],ny=y+dy[i];
            if(nx>=1 && nx<=n&&ny>=1&&ny<=m&& a[nx][ny]=='*' && vis[nx][ny]==0){
                vis[nx][ny]=1;
                dfs(nx,ny);
                vis[nx][ny]=0;
            }
        }
    }
    return s;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    cout<<dfs(0,1);
    return 0;
}

Guess you like

Origin blog.csdn.net/zzxycdy/article/details/121304634