题目: 输入一个n*m的矩阵由0和1组成,1能通过,0不能,再输入起点的位置和终点的位置,求起点到终点的最短路径
int put
4 4
1 1 1 0
1 1 0 0
1 1 0 0
1 1 1 1
1 2
4 4
out
5
#include<iostream>
#include<queue>
using namespace std;
struct pace{
int x,y,step;
};
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m,mark[100][100],a[100][100];
bool check(int x,int y)
{
if((a[x][y]==1)&&(x>0&&x<=n)&&(y>0&&y<=m))return true;
else return false;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)cin>>a[i][j];
}
int stx,sty,endx,endy;
cin>>stx>>sty>>endx>>endy;
pace st;
st.x=stx;
st.y=sty;
st.step=0;
queue<pace> q;
q.push(st);
int ans=-1;
while(q.size())
{
pace cur=q.front();
if(cur.x==endx&&cur.y==endy)
{
ans=cur.step;
break;
}
for(int i=0;i<4;i++)
{
int nx=cur.x+dir[i][0];
int ny=cur.y+dir[i][1];
if(mark[nx][ny]==0&&check(nx,ny))
{
pace next;
next.x=nx;
next.y=ny;
next.step=cur.step+1;
mark[nx][ny]=1;
q.push(next);
}
}
q.pop();
}
cout<<ans;
}