最少步数(bfs)
最少步数
- 描述
-
这有一个迷宫,有0~8行和0~8列:
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,10表示道路,1表示墙。
现在输入一个道路的坐标作为起点,再如输入一个道路的坐标作为终点,问最少走几步才能从起点到达终点?
(注:一步是指从一坐标点走到其上下左右相邻坐标点,如:从(3,1)到(4,1)。)
- 输入
- 第一行输入一个整数n(0<n<=100),表示有n组测试数据;
随后n行,每行有四个整数a,b,c,d(0<=a,b,c,d<=8)分别表示起点的行、列,终点的行、列。 - 输出
- 输出最少走几步。
- 样例输入
-
- 2
- 3 1 5 7
- 3 1 6 7
- 2
- 样例输出
-
- 12
- 11
TLE code
- #include <iostream>
- #include <algorithm>
- #include <cstdio>
- #include <cstring>
- using namespace std;
- int a,b,c,t;
- int map[][][];
- int Min=;
- int dirx[]={,,,-},diry[]={,-,,},dirz[]={,-};
- int dfs(int z,int x,int y,int step)
- {
- int i,j;
- if(step>t||z<||z>=a||x<||x>=b||y<||y>=c)
- return ;
- if(map[z][x][y])
- return ;
- if(x==b-&&y==c-&&z==a-)
- {
- Min=min(Min,step);
- return ;
- }
- else
- {
- step++;
- map[z][x][y]=;
- for(i=;i<;i++)
- {
- int xx=x+dirx[i],yy=y+diry[i];
- dfs(z,xx,yy,step);
- }
- for(i=;i<;i++)
- {
- int zz=z+dirz[i];
- dfs(zz,x,y,step);
- }
- map[z][x][y]=;
- }
- return ;
- }
- int main()
- {
- int k,i,j,p;
- //freopen("in.txt","r",stdin);
- cin>>k;
- while(k--)
- {
- Min=;
- cin>>a>>b>>c>>t;
- for(i=;i<a;i++) //层
- for(j=;j<b;j++)
- for(p=;p<c;p++)
- cin>>map[i][j][p];
- dfs(,,,);
- if(Min>t)
- cout<<-<<endl;
- else
- cout<<Min<<endl;
- }
- }
AC code
- #include <iostream>
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int a,b,c,d,m;
- int x[][]={
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- ,,,,,,,,,
- };
- int bfs(int p,int q,int s)
- {
- if(x[p][q]==)
- return ;
- if(p==c&&q==d)
- {
- m=min(s,m);
- return ;
- }
- s++;
- x[p][q]=;//不再返回
- bfs(p-,q,s);//向四周搜索
- bfs(p+,q,s);
- bfs(p,q+,s);
- bfs(p,q-,s);
- x[p][q]=;//不得返回。。。看了半天才明白
- return ;
- }
- int main()
- {
- int N;
- cin>>N;
- while(N--)
- {
- cin>>a>>b>>c>>d;
- m=;
- bfs(a,b,);
- cout<<m<<endl;
- }
- return ;
- }
- 12
最少步数(bfs)的更多相关文章
- 最少步数(bfs)
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- POJ 3126 Prime Path【从一个素数变为另一个素数的最少步数/BFS】
Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26475 Accepted: 14555 Descript ...
- ny 58 最少步数 (BFS)
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=58 就是一道简单的BFS 练习练习搜索,一次AC #include <iostream& ...
- 最少步数(dfs + bfs +bfs优化)
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- ACM 最少步数
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- [ACM_搜索] ZOJ 1103 || POJ 2415 Hike on a Graph (带条件移动3盘子到同一位置的最少步数 广搜)
Description "Hike on a Graph" is a game that is played on a board on which an undirected g ...
- NYOJ 58 最少步数
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- nyoj 1022 最少步数【优先队列+广搜】
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...
- nyist 58 最小步数 BFS
最少步数 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0 ...
随机推荐
- label的for属性与inputde的id元素绑定
<form> <label for="male">Male</label> <input type="radio" n ...
- 异常处理与调试2 - 零基础入门学习Delphi51
异常处理与调试2 让编程改变世界 Change the world by program Delphi 异常类 利用异常机制,就是允许写代码时可以假设:如果用户可以得到子程序调用或计算的结果,这些结果 ...
- Linux上使用Azure CLI来管理Azure
在Windows上我们有强大的Powershell提供各种命令来管理Azure的服务,在Linux上微软提供了基于Node.JS的跨平台的Azure Command Line来帮助Linux用户来管理 ...
- USB系列之七:ASPI介绍及命令测试
在以前的一篇博文<关于构建DOS下编程平台的总结>中曾经介绍了一种在DOS下驱动U盘的方法,我们大致回顾一下.在config.sys中加入两个驱动程序,就可以驱动U盘:device = a ...
- I2C串行总线标准驱动程序(C51)-万能程序
#include "reg51.h" #include "intrins.h" unsigned char SystemError; sbit SCL= P1^ ...
- windbg命令详解
DLL 该扩展仅在内核模式下使用,即使它是在Ext.dll中的. Windows NT 4.0 Ext.dll Windows 2000 Ext.dll Windows XP和之后 Ext.dll ...
- EMMA: 免费java代码测试覆盖工具
From:http://emma.sourceforge.net/ EMMA: a free Java code coverage tool Code coverage for free: a b ...
- ZOJ 1008 Gnome Tetravex(DFS)
Gnome Tetravex Time Limit: 10 Seconds Memory Limit: 32768 KB Hart is engaged in playing an inte ...
- Linux如何实现开机启动程序详解
我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤. 加载内核LILO 启动之 ...
- 分享几种Linux软件的安装方法
Linux软件安装由于不同的Linux分支,安装方法也互不相同,介绍几种常见的安装方法. 1. 源码安装, 对于本身具有开源血统的Linux系统来说,几乎所有的开源软件都支持在Linux平台运 ...