题目描述
给出一张地图,这张地图被分为n*m(n*m<=100)个方块,现在你处在地图的(x1,y1)的位置,问:你至少需要拐几个弯才能到达目的地(x2,y2)?你只能沿着水平和垂直方向在地图上"0"的区域上前进。
输入格式
第一行:n和m。
第二至n+1行:一个矩阵,为地图。
第n+2行:x1,y1,x2和y2。
输出格式
只有一行,为最少的转弯次数。
一道简单的广搜。。不过很是做了有一点久。
一是数据坑了,自己到自己应该距离是0的,但是答案给的3。明显是答案有问题嘛。
二是首尾两次转角要单独考虑,不能简单的减一,这样子是最保险的。即以(x1,y1)向四个方向扩展,加入队列中作为起始点。最后的时候,如果某一个点能够扩展出(x2,y2)则直接输出答案而不再扩展。
#include <cstdio>
#include <string>
#define newi i+di[dd]*delta
#define newj j+dj[dd]*delta
struct node
{
long i,j,t,d;
};
node que[1000000];