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. 03_常用的JS正则表达式54种形式类型

    1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...

  2. makefile个人理解

    makefile makefile抽象层面的理解 学习某一样东西之前一定要明确学习的目的,即学习了这项工具能解决一些什么问题,其优势是什么? makefile的优势就是能够动态根据文件的新旧来决定是否 ...

  3. Navicat10.1.11使用记录

    设计表的时候有个允许空值(null),如果不勾选,则无法插入null(但是可以插入‘null’),且默认值不能为null: 如果某个字段没有设置默认值,而插入时又没有给此字段赋值,则会提示warnin ...

  4. 《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高?

    能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis的线程模型了解吗?为啥单线程效率还这 ...

  5. bootstrap4popper.js报错Uncaught ReferenceError

    这是因为bootstrap4需要umd版的popper.js <script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/pop ...

  6. React Context 的用法

    在React的官方文档中,Context被归类为高级部分(Advanced),属于React的高级API,但官方并不建议在稳定版的App中使用Context. The vast majority of ...

  7. CentOS 7.2 搭建Jenkins

    1,准备阶段 jenkins下载 https://jenkins.io/download/ 这里我们选择稳定版本 (本文介绍的是通过tomcat来部署的,由于jenkins内部也集成了容器,也可直接通 ...

  8. Docker学习(十)Docker容器编排 Docker-compose

    Docker学习(十)Docker容器编排 Docker-compose 标签(空格分隔): docker 容器编排是什么 应用一般由单独容器化的组件组成,须按照一定顺序在网络级别进行组织,以使其能够 ...

  9. 开始使用Manjaro

    Manjaro是什么? 一个基于Arch系列,开源的linux发行版 Mnajrao官网了解更多,这里不做更多阐述内容 为什么使用Manjaro 第一点,为了方便自己隔离腾讯网游 第二点,更方便的学习 ...

  10. CSS-15-定位

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...