计蒜客习题:走迷宫


问题描述

给一个 n 行 m 列的 2 维的迷宫,’S’表示迷宫额起点,’T’表示迷宫的终点,’#’表示不能通过的点,’.’ 表示可以通过的点。你需要从’S’出发走到’T’,每次只能上下左右走动,并且只能进入能通过的点,每个点只能通过一次。现在要求你求出有多少种通过迷宫的的方案。
输入格式
第一行输入 n, m (1≤n,m≤10) 表示迷宫大小。
接下来输入 n 行字符串表示迷宫。
输出格式
输入通过迷宫的方法数。
样例输入
3 3
S..
.#.
..T
样例输出
2


AC代码

#include 
#include 
#include 
using namespace std;
int m,n;
int sx,sy,ex,ey;
int mp[20][20];
int cnt=0;
int ax[10]={0,0,-1,1};
int ay[10]={1,-1,0,0};
int visited[20][20];
int dfs(int x,int y)
{   if((x>=0)&&(y>=0)&&(x0))
    {
        if((y==ey)&&(x==ex)){cnt++;return 0;}
        visited[x][y]=1;
        if(visited[x][y]==1)
        for(int i=0;i<4;i++)
        {   
        int tx=x+ax[i];
        int ty=y+ay[i];
        if((tx>=0)&&(ty>=0)&&(tx0)&&(visited[tx][ty]==0))
        dfs(tx,ty);
        }
    }
    visited[x][y]=0;
    return 0;
}

int main()
{   memset(visited,0,sizeof(visited));
    cin>>n>>m;
    for(int i=0;ifor(int q=0;qchar a;
            cin>>a;
            if(a=='.'){mp[i][q]=0;}
            else if(a=='S'){sx=i;sy=q;mp[i][q]=0;}
            else if(a=='T'){ex=i;ey=q;mp[i][q]=0;}
            else mp[i][q]=1; 
        }
    }
    dfs(sx,sy);
    cout<return 0;
 } 

你可能感兴趣的:(算法竞赛刷题,#,搜索算法,计蒜客NOIP习题)