第一次写题解,不过估计也就自己看得懂吧>_<
include[HTML_REMOVED]
using namespace std;
const int N=110;
int n,m;
int g[N][N];//存放所给地图信息
int d[N][N];//存放各个点到起点的距离
//弄出一个队列来存储新的可行的点
typedef pair[HTML_REMOVED] PII;
PII q[N*N];//这个是所需队列 存储坐标
int bfs()
{
int hh=0,tt=0;//初始化队列的头和尾
memset(d,-1,sizeof d);//将 d 全部初始化为-1
q[0]={0,0}; //将原点存入
d[0][0]=0;
int dx[4]={1,0,-1,0},dy[4]={0,-1,0,1}; //分别代表下、左、上、右
while(hh<=tt)//栈不能为空
{
PII t=q[hh];//取队头元素
for(int i=0;i<4;i)
{
int x1=t.first +dx[i];
int y1=t.second +dy[i];
if(x1[HTML_REMOVED]=0&&y1[HTML_REMOVED]=0&&d[x1][y1]==-1&&g[x1][y1]==0)//在地图里面并且没走过,而且可以走
{
d[x1][y1]=d[t.first ][t.second ] +1;
q[++tt]={x1,y1};//将该点坐标存入队列
}
}
}
return d[n-1][m-1];
}
int main()
{
cin>>n>>m;
for(int i=0;i[HTML_REMOVED]>g[i][j];
}
}
cout<<bfs()<<endl;
return 0;
}
加油,a友