http://acm.split.hdu.edu.cn/showproblem.php?pid=2579

简单bfs题,刚开始在纠结怎么存放vis,因为步数可能有几百步,这么多格子开数组的话也太多了,后来想到只要保存步数%k的状态就好了,bfs到达该点的步数肯定是最优的。

#include<iostream>
#include<string>
#include<cstring>
#include<queue>
using namespace std; string s[];
int r,c,k,dir[][] = {-,,,-,,,,},vis[][][],flag; struct point
{
int x,y,counts;
}start; int main()
{
int n;
cin >> n;
while(n--)
{
flag = ;
memset(vis,,sizeof(vis));
cin >> r >> c >> k;
for(int i = ;i < r;i++) cin >> s[i];
for(int i = ;i < r;i++)
{
for(int j = ;j < c;j++)
{
if(s[i][j] == 'Y')
{
start.x = i;
start.y = j;
goto there;
}
}
}
there:
start.counts = ;
queue<point> q;
q.push(start);
vis[start.x][start.y][] = ;
while(!q.empty())
{
int x = q.front().x,y = q.front().y,counts = q.front().counts;
q.pop();
if(s[x][y] == 'G')
{
flag = ;
cout << counts << endl;
break;
}
for(int i = ;i < ;i++)
{
int xx = x+dir[i][],yy = y+dir[i][],z = (counts+)%k;
if(xx < || xx >= r || yy < || yy >= c) continue;
if(s[xx][yy] == '#' && z) continue;
if(vis[xx][yy][z]) continue;
point temp;
temp.x = xx;
temp.y = yy;
temp.counts = counts+;
q.push(temp);
vis[xx][yy][z] = ;
}
}
if(!flag) cout << "Please give me another chance!" << endl;
}
return ;
}

HDU_2579_bfs的更多相关文章

随机推荐

  1. Windows安装EMQ服务器(mqtt)

    先去EMQ官网下载安装包 https://www.emqx.io/downloads#broker 注意:此处一定不能下错成企业版的,不然EMQ会由于缺少企业license无法启动服务 解压到任意路径 ...

  2. 【转】ArcGIS ADF 实时轨迹问题初步解决方案

    Web ADF 实时轨迹是指在Web客户端指定一资源项,并对资源项进行实进跟踪并绘制出轨迹图.实时绘制可采用Ajax实现服务端与客户端无刷新动态绘制,在.net2.0 框架下可轻易实现:通过客户端时钟 ...

  3. js 日期增减

    js 的 Date 对象提供了许多方法,可以获取日期的年.月.日等信息,也可以修改年.月.日 日期的增减可以使用setFullYear().setMonth().setDate() 等方法 exp: ...

  4. 12.Android-SQLiteOpenHelper使用

    1.SQLite介绍 SQLite,是一款轻型的数据库,它的优缺点有如下: 轻量级,适合嵌入式设备,并且本身不依赖第三方的软件,使用它也不需要“安装”. 并发(包括多进程和多线程)读写方面的性能不太理 ...

  5. Spring-cloud微服务实战【一】:微服务的概念与演进过程

    本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架 ...

  6. React16源码解读:揭秘ReactDOM.render

    引言 在上一篇文章中我们通过create-react-app脚手架快速搭建了一个简单的示例,并基于该示例讲解了在类组件中React.Component和React.PureComponent背后的实现 ...

  7. FileUpload的控件上传excel

    在一个使用FileUpload的控件上传excel,读取excel的数据 因为上传的路径一直被限定在C:\Program\IIS\Express 一直限制这个文件下, 想要解决这个问题. 在谷歌浏览器 ...

  8. 【python系统学习05】input函数——实现人机交互

    input函数 目录 input用途 语法 示例 参数 返回值 返回值数据类型转换 容错处理 动手吧 input用途 实现人机交互: 1.你提出问题打印在屏幕上, 2.运行程序的人再输入回答. 3.按 ...

  9. 华为,小米部分机型微信浏览器rem不适配的解决方案

    针对近日华为,小米的部分机型,在升级系统或升级微信之后,微信内置浏览器产生的rem不能正确填充满的问题,有如下解决方案 目前来看,产生这个情况的原因是因为给html附font-size时,附上的fon ...

  10. 安装numpy、matplotlib

    一.安装numpy 1.下载 https://pypi.org/project/numpy/#files 2.安装 pip3 install numpy-1.17.3-cp37-cp37m-win_a ...