题目描述
给出一个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;
}