【搜索】迷宫问题(路径条数)

题目描述

给出一个n*m的迷宫图和一个入口、一个出口,只能走上下左右。输出从迷宫入口到出口的路径条数。如果找不到路径输出-1

输入

第一行是两个数n,m。n表示行,m表示列

接下来是m行n列由1和0组成的数据,1表示可以走,0表示不可以走

最后一行是起始点和结束点。 ( 1 < n , m < 15 )

输出

入口到出口的路径条数

如果找不到路径输出-1

样例输入

3 4
1 0 1 1
1 1 1 1
0 0 0 1
1 1 3 4

样例输出

2

提示:直接一个深搜干上去

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[16][16],ans=0,gx,fx,gy,fy;  
int dx[4]={-1,1,0,0};//x的四方向
int dy[4]={0,0,-1,1};//y的四方向
void dfs(int x,int y){//无返回值
    a[x][y]=0; 
    if(x==fx&&y==fy){//判断是否到达终点
        ans++;return;//计数
    }for(int i=0;i<4;i++){遍历
        int xx=x+dx[i],yy=y+dy[i];
        if (a[xx][yy]) {    
            dfs(xx,yy);            
            a[xx][yy]=1;           
        }
    }
}signed main(){
    //这里要用signed无符号类型,因为int成为了变量
    //当然,unsigned也可以用
    cin>>n>>m;            
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>a[i][j];
    cin>>gx>>gy>>fx>>fy;//输入起点坐标与终点坐标
    dfs(gx,gy);//深搜
    if(ans==0)cout<<-1;
    else cout<<ans<<endl;return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值