最少转弯问题
内存限制:256 MiB时间限制:1000 ms标准输入输出
题目类型:传统评测方式:文本比较
题目描述
给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山。平地可以通过,高山则不能。现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能到达目的地(x2,y2)?你只能沿着水平和垂直方向的平地上行进,拐弯次数就等于行进方向的改变(从水平到垂直或从垂直到水平)的次数。例如:如图,最少的拐弯次数为5。
输入格式
第一行:n和m。
第二至n+1行:一个矩阵,为地图。(0:空地;1:高山。)
第n+2行:x1,y1,x2和y2。
输出格式
只有一行,为最少的转弯次数。
样例
样例输入
5 7
1 0 0 0 0 1 0
0 0 1 0 1 0 0
0 0 0 0 1 0 1
0 1 1 0 0 0 0
0 0 0 0 1 1 0
1 3 1 7
样例输出
5
c++AC代码
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][105],x,y,xx,yy,ans=INT_MAX;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
bool flag[105][105];
struct node{
int x,y,z,ans;
}t1,t2;
queue<node> q;
inline void bfs(int x,int y){
t1.x=x,t1.y=y,t1.z=1314520,t1.ans=0;
q.