最少步数
时间限制: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,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 0表示道路,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样例输出
12
11

  

///Memory Limit Exceeded

#include <iostream>
#include <queue>
using namespace std;
struct node { int x, y,step; };
struct node s,e;
int dd[4][2]={-1,0,1,0,0,-1,0,1},n,ans;
int g[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
};
queue <node> q; void bfs()
{ node t,t2; while (! q.empty() ) q.pop(); q.push(s); while ( !q.empty()) { t=q.front(); q.pop(); if (t.x==e.x && t.y==e.y) { ans=t.step; return ; }
for (int i=0; i<4; i++)
{ t2.x=t.x+dd[i][0]; t2.y=t.y+dd[i][1]; t2.step=t.step+1; if ( g[t2.x][t2.y]==0 ) q.push(t2);
}
}
} int main(int argc, char *argv[])
{ cin>>n;
while (n--)
{ cin>>s.x>>s.y>>e.x>>e.y; s.step=0;
ans=0;
bfs();
cout<<ans<<endl;
}
return 0;
} ******************************************************************************************************* //ACCept #include <iostream>
#include <queue>
#define N 9
#define M 9
using namespace std; int map[N][M]=
{
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 d[4][2]={-1,0,0,1,1,0,0,-1 }; struct point
{
int x,y,step;
}s,e; queue <point> my; int BFS(point s)
{
int i,x,y;
point t,temp;
while (!my.empty()) my.pop();
my.push(s);
while (!my.empty())
{
t=my.front();
my.pop();
for (i=0; i<4; i++)
{
x=t.x+d[i][0];
y=t.y+d[i][1];
if (x==e.x&& y==e.y) return t.step+1;
if (x>=0 && x<N && y>=0 && y<M && map[x][y]==0)
{
temp.x=x;
temp.y=y;
temp.step=t.step+1;
my.push(temp);
}
}
}
} int main()
{
int n,x0,y0,ans;
cin>>n;
while (n--)
{
cin>>s.x>>s.y>>e.x>>e.y;
s.step=0;
if (s.x==e.x && s.y==e.y) ans=0;
else ans=BFS(s);
cout<<ans<<endl;
}
return 0;
} ************************************************************* Accept #include <cstring>
#include <iostream>
#include <queue>
using namespace std;
int ans;
int g[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 dd[4][2]={-1,0,0,1,1,0,0,-1 };
int bz[10][10];
struct node{ int x,y,step;};
struct node s,e;
queue <node> q; int bfs( )
{
int i,x,y;
node t,t2;
q.push(s); bz[s.x][s.y]=1;
while (!q.empty())
{
t=q.front();
q.pop();
if (t.x==e.x && t.y==e.y) return t.step;
for (i=0; i<4; i++)
{
x=t.x+dd[i][0];
y=t.y+dd[i][1];
if (g[x][y]==0&&!bz[x][y])
{ t2.x=x; t2.y=y; t2.step=t.step+1;
bz[x][y]=1;
q.push(t2);
}
}
}
} int main()
{
int n;
cin>>n;
while (n--)
{ while (!q.empty()) q.pop();
memset(bz,0,sizeof(bz));
cin>>s.x>>s.y>>e.x>>e.y; s.step=0;
cout<<bfs( )<<endl;
}
return 0;
}

  

nyist 58 最小步数 BFS的更多相关文章

  1. ny 58 最少步数 (BFS)

    题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=58 就是一道简单的BFS 练习练习搜索,一次AC #include <iostream& ...

  2. 带你学习BFS最小步数模型

    最小步数模型 一.简介 最小步数模型和最短路模型的区别? 最短路模型:某一个点到另一个点的最短距离(坐标与坐标之间) 最小步数模型:不再是点(坐标),而是状态到另一个状态的转变 BFS难点所在(最短路 ...

  3. yzoi2226最小步数的详细解法

    Description - 问题描述 在各种棋中,棋子的走法总是一定的,如中国象棋中马走“日”.有一位小学生就想如果马能有两种走法将增加其趣味性,因此,他规定马既能按“日”走,也能如象一样走“田”字. ...

  4. 1到n的最小步数

    1到n的最小步数 Time Limit: 1 Sec  Memory Limit: 128 MB 给你一个数n,让你求从1到n的最小步数是多少. 对于当前的数x有三种操作: 1:  x+1 2:  x ...

  5. ny58 最小步数

    最少步数 时间限制: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 ...

  6. POJ 1753 Flip Game (高斯消元 枚举自由变元求最小步数)

    题目链接 题意:4*4的黑白棋,求把棋全变白或者全变黑的最小步数. 分析:以前用状态压缩做过. 和上题差不多,唯一的不同是这个终态是黑棋或者白棋, 但是只需要把给的初态做不同的两次处理就行了. 感觉现 ...

  7. One Person Game(扩展欧几里德求最小步数)

    One Person Game Time Limit: 2 Seconds      Memory Limit: 65536 KB There is an interesting and simple ...

  8. Algorithm --> 棋盘中求出A到B的最小步数

    求出A到B的最小步数 给定象棋盘,以及位置A和B, 求出从A到B的最小步数 代码: #include <cstdio> #include <iostream> #include ...

  9. [leetcode]45. Jump Game II青蛙跳(跳到终点最小步数)

    Given an array of non-negative integers, you are initially positioned at the first index of the arra ...

随机推荐

  1. maven提示错误的解决办法

    import或者new一个的maven project的时候,提示如下错误 Description    Resource    Path    Location    TypeCannot read ...

  2. 在vSphere5.0虚拟机里的Ubuntu Server 32位安装JDK

    本机操作系统Win7 服务器用vSphere 5.0 虚拟机  在虚拟机安装了Ubuntu Server 12.04 1.首先到Oracle官网上下载jdk-7u51-linux-i586.tar.g ...

  3. VS2015升级Update2之后Cordova程序提示:此应用程序无法在此电脑上运行

    VS2015在升级到Update2之后,有可能出现如下异常,在运行Cordova项目时提示: 查看输出面板会有乱码错误信息: 出现此问题的原因是在于npm程序损坏了.vs调用的npm程序并不是在nod ...

  4. node 搭建开发框架express

    参考地址: http://www.itnose.net/detail/6095003.html 开发环境 E:\project> node -v v0.10.30 E:\project> ...

  5. ios 动画效果CATransition笔记

    初学ios开发,很多概念还不清楚,所以只有边学边做例子.又怕学了后面忘了前面,因此用自己的博客来纪录自己的学习历程,也是对自己学习不要懈怠做个监督. 刚学ios做动画效果.因为ios封装得很好,实现i ...

  6. ScheduleThreadPoolExecutor源码分析(二)

    DelayedWorkQueue: DelayedWorkQueue实现了BlockingQueue接口,因此其可以作为线程池的任务队列.BlockingQueue的主要属性有以下几个: privat ...

  7. 简单高效读写修改整个文本Slurp

    语法: use File::Slurp; #标量环境下一次读取所有文本内容到标量中. my $text = read_file( 'filename' ) ; #  读取文本的所有行到数组中. my ...

  8. TaskbarCreated 消息

    托盘中的图片就通过注册这个消息来实现,系统和进程通过进程间通信发送这个消息,进程接收他

  9. WCF服务对象实例化基础

    很多情况下,我们都需要控制wcf服务端对象的初始化方式,用来控制wcf实例在服务端的存活时间. Wcf框架提供了三种创建wcf实例的方式. WCF服务对象实例化基础 在普通的WCF请求和相应过程中,将 ...

  10. dedecms flag标签属性

    头条[h] flag='h' 推荐[c] flag='c' 幻灯[f] flag='f' 特荐[a] flag='a' 滚动[s] flag='s' 加粗[b] flag='b' 图片[p] flag ...