【题目描述】
输入一个矩阵,0表示通路,1表示障碍,求从左上角到右下角的最短路。
【输入样例】
3 3 //有多少行,有多少列
0 1 1
0 0 0
1 0 0
//左上角(起点)和右下角(重点)不能是1
【输出样例】
4
代码
#include<iostream>
#include<cstdio>
using namespace std;
int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
int n,m,a[1010][1010],minn=90999999,x[10010],y[10010];
void dfs(int k,int x,int y)
{
for(int i=1;i<=4;i++)
{
if(x+dx[i]>0&&x+dx[i]<=m&&y+dy[i]>0&&y+dy[i]<=n&&a[x+dx[i]][y+dy[i]]==0)
{
x[k]=x+dx[i];
y[k]=y+dy[i];
a[x+dx[i]][y+dy[i]]=1;
if(x+dx[i]==m&&y+dy[i]==n)
{
minn=min(minn,k);
}
else
{
dfs(k+1,x+dx[i],y+dy[i]);
}
a[x+dx[i]][y+dy[i]]=0;
}
}
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
dfs(1,1,1);
cout<<minn;
return 0;
}
若有错,请指出。