题目:
小恩被困,小哈去救她,在格子里(m,n)时二位数组格子的排数个列数,默认第一个格子为(1,1),(m1,n1)为小恩被困的坐标,小哈去救人的找出最短路径
输入样例:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
4 3
输出样例:
7
思路:
用dfs依次去访问下一个坐标,最后比较得最小值
#include<iostream>
using namespace std;
typedef long long ll;
int m,n,m1,n1,temp=99999999,book[51][51]={0};//temp用于储存结果表最短路径
void dfs(int x,int y,int step);//深度搜索下一步;
int a[100][100];
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
cin>>m1>>n1;
book[1][1]=1;//初始化定义个,以防回到原点;
dfs(1,1,0);
cout<<temp;
return 0;
}
void dfs(int x1,int y1,int step)
{
int next[5][2]={{1,0},{-1,0},{0,1},{0,-1}};
//找到小哈后比较步数
int x,y;
if(x1==m1&&y1==n1)
{
// cout<<" ,2";
if(temp>step)
temp=step;
return ;
}
else
{
for(int i=0;i<4;i++)
{
x=x1+next[i][0];
y=y1+next[i][1];
//cout<<x1<<"/"<<y1<<",";
if(x>m||y>n||x<1||y<1)
continue;
else
{
if(book[x][y]==0&&a[x][y]==0)
{
book[x][y]=1;//标记到达过的点
dfs(x,y,step+1);
book[x][y]=0;//取消标记
}
}
}
return ;//不要提前返回
}
}
注意事项:一定要注意void空函数的返回,不要提前,或者放在不该放的地方(我就傻X,于是检查了半天,呜呜呜,
,,)