最少步数

时间限制:3000 ms  |  内存限制:65535 KB
难度:4

->   Link  <-

这个题深搜广搜都是可以的,迷宫已经给出了,就看怎么做了;一般起点终点确定用广搜求最短路径问题;

广搜就用到队列了,将起点周围的可行的点都加入队列,在从队列中选取点又重复刚才的操作,直到找到终点;

可以用二维数组存起点到此点的最短路径,起点的路径为0;从队列里拿出一个点,其周围可行的点的路径便是这个点的路径加一,一直广搜到终点

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f;
int MAP[9][9]=
{
1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,1,0,1,
1,0,0,1,1,0,0,0,1,
1,0,1,0,1,1,0,1,1,
1,0,0,0,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,
};
int sx,sy,gx,gy;
typedef pair<int,int>P;
int d[9][9];
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
void init()
{
for(int i=0;i<=8;i++)
for(int j=0;j<=8;j++)
d[i][j]=INF;
}
int bfs()
{
queue<P>q;
q.push(P(sx,sy));
d[sx][sy]=0;
while(!q.empty())
{
P p=q.front();
q.pop();
if(p.first==gx&&p.second==gy) break;
for(int i=0;i<4;i++)
{
int xx=p.first+dx[i];
int yy=p.second+dy[i];
if(xx>=0&&xx<=8&&yy>=0&&yy<=8&&!MAP[xx][yy]&&d[xx][yy]==INF)
{
q.push(P(xx,yy));
d[xx][yy]=d[p.first][p.second]+1;
}
}
}
return d[gx][gy];
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&sx,&sy,&gx,&gy);
init();
printf("%d\n",bfs());
}
return 0;
}

最新文章

  1. LCA---Tarjan算法
  2. 《深入.NET平台和C# 编程》内测纠错记录
  3. Java多线程编程——进阶篇二
  4. 【wikioi】1229 数字游戏(dfs+水题)
  5. 高可用软件Keepalived
  6. mongodb学习相关网址
  7. beforefieldinit释义(3)
  8. 基于FPGA的DW8051移植(二)
  9. Android——apk反编译
  10. mysql主主配置
  11. [Swift]LeetCode636. 函数的独占时间 | Exclusive Time of Functions
  12. js时间国际化
  13. 根据cid获取哔哩哔哩弹幕
  14. maven 本地仓库无法更新到最新版本的jar包
  15. Servlet注释与部署描述符
  16. WebSocket.之.基础入门-前端发送消息
  17. strpos 的正确使用方式
  18. iOS中大文件下载(单线程下载)
  19. 【BZOJ4059】Non-boring sequences
  20. 更改FP SYSTEM密码

热门文章

  1. 解题报告:hdu 1073 Online Judge
  2. XmlPullParser简单教程
  3. 理解http浏览器的协商缓存和强制缓存
  4. JDK11源码分析之集合类(一)----HashMap
  5. [BZOJ1004][HNOI2008]Cards 群论+置换群+DP
  6. 在 Windows Server 上搭建 *** 服务端(转载加亲测)
  7. 富文本KindEditor使用
  8. 取消input聚焦时的边框,去除ios点击时,自动添加的底色效果
  9. JavaSE-22 反射
  10. Beam Search