最小转弯问题

Description
给出一张地图,这张地图被分为 n×m(n,m<=100)个方块,任何一个方块不是平地就是高山。平地可以通过,高山则不能。现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯才能到达目的地(x2,y2)?你只能沿着水平和垂直方向的平地上行进,拐弯次数就等于行进方向的改变(从水平到垂直或从垂直到水平)的次数。例如:如图 1,最少的拐弯次数为5。


Input

第 1行:n m 第 2至n+1行:整个地图地形描述(0:空地;1:高山), 如图,第2行地形描述为:1 0 0 0 0 1 0 第3行地形描述为:0 0 1 0 1 0 0 …… 第n+2行:x1 y1 x2 y2 (分别为起点、终点坐标)


Output

s (即最少的拐弯次数)


Sample Input

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


Sample Output

5


代码

#include<stdio.h>
#include<iostream>
using namespace std;
const int dx[5]={0,1,-1,0,0};
const int dy[5]={0,0,0,1,-1};
int n,m,a[10005][10005],x1,y1,x2,y2,st[1005][4];
void bfs(){
int head=0,tail=1;
st[1][1]=x1;st[1][2]=y1;
do{
head++;
for(int i=1;i<=4;i++){ //四个方向
int x=st[head][1]+dx[i];
int y=st[head][2]+dy[i];
while(x>=1 and x<=n and y>=1 and y<=m and a[x][y]==0){ //如果没有出界而且能走,就一直走
if(x==x2 and y==y2){ //判断是不是满足条件
printf("%d",st[tail][3]);
return ;
}
tail++;
a[x][y]=1;
st[tail][1]=x;
st[tail][2]=y;
st[tail][3]=st[head][3]+1; //是st[head][3]的转弯数加一
x+=dx[i];
y+=dy[i];
}
}
}while(head<tail);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
bfs();
return 0;
}

最新文章

  1. 最近在玩linux时 yum 遇到了问题
  2. 25M电子琴实现
  3. command line
  4. spring bean生命周期管理--转
  5. haskell笔记1
  6. 开始记录blog
  7. 读:HIS 与医保系统的接入方案及实现
  8. ural 1297(后缀数组+RMQ)
  9. 《Python基础教程(第二版)》学习笔记 -&gt; 第八章 异常
  10. c#等待所有子线程执行完毕方法
  11. hive0.11的编译/安装/配置
  12. 【BZOJ1861】【splay】Book 书架
  13. 高性能WEB开发 为什么要减少请求数,如何减少请求数!
  14. editplus使用:非法字符: \65279
  15. 解决IE11无法下载文件的问题
  16. C语言的位运算的优势
  17. 这是对position讲解最通俗易懂的版本了。
  18. 基于opencv3.0下的运动车辆识别
  19. Python Django 2.1登录功能_1
  20. CentOS7利用systemctl添加自定义系统服务【转】

热门文章

  1. bye MVA
  2. disable html input &amp; pointer-events
  3. BTC暴涨市值仅次于亚马逊,NGK推出新人助力空投,直接免费送VAST!
  4. Fast R-CNN训练自己的数据集时遇到的报错及解决方案
  5. sklearn中的pipeline的创建与访问
  6. IntelliJ Idea Error Address localhost 1099 is already in use.
  7. Linux-基础命令学习
  8. SpringBoot(八):SpringBoot中配置字符编码 Springboot中文乱码处理
  9. MYSQL索引优化法则
  10. 浮动引发的高度塌陷问题及其解决方法(BFC相关概念及性质)