HDU_2579_bfs
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的更多相关文章
随机推荐
- 前端Tips#3 - 简写的 border-radius 100% 和 50% 是等效的
本文同步自 JSCON简时空 - 技术博客,点击阅读 视频讲解 视频地址 文字讲解 1.先讲结论 border-radius 这个 css 属性大家应该使用得非常娴熟,现实中用到的场景基本都是四个圆角 ...
- Vuex实践(下)-mapState和mapGetters
Vuex系列文章 <Vuex实践(上)> <Vuex实践(中)-多module中的state.mutations.actions和getters> <Vuex实践(下)- ...
- VMware Workstation CentOS7 Linux 学习之路(3)--.net coreWeb部署
1.首先创建一个文件夹,命名为core mkdir core cd core 2.我这里用FlashFXP连接Linux 把我发布的项目上传到CentOS7的core文件夹下 此时我输入命令 dotn ...
- java Random类(API)
一.过程 1.导包 2.实例化 3.使用(类的成员方法) 二.作用 生成随机数,与python中random 相似 三.常用方法 1.nextInt(),随机生成int数据类型范围的数 2.nextI ...
- Java单体应用 - 导读
原文地址:http://www.work100.net/training/monolithic 更多教程:光束云 - 免费课程 Java单体应用 本阶段课程将学习如何进行Java单体Web应用开发,经 ...
- 【Java并发基础】死锁
前言 我们使用加锁机制来保证线程安全,但是如果过度地使用加锁,则可能会导致死锁.下面将介绍关于死锁的相关知识以及我们在编写程序时如何预防死锁. 什么是死锁 学习操作系统时,给出死锁的定义为两个或两个以 ...
- 机器学习-K最近邻算法
一.介绍 二.编程 练习一(K最近邻算法在单分类任务的应用): import numpy as np #导入科学计算包import matplotlib.pyplot as plt #导入画图工具fr ...
- test api formdata
- 发现 一个业务管理系统 解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 。 哈
解决了 orm 和 前端框架 剩下的 是 业务逻辑 了 . 哈 还有 各种 aop 组件 呢 . 大家 high 来 准备 用 fluent data 和 mysql 写一个 wcf 的 接口呢. ...
- 如何使用Serilog.AspNetCore记录ASP.NET Core3.0的MVC属性
这是Serilog系列的第三篇文章. 第1部分-使用Serilog RequestLogging减少日志详细程度 第2部分-使用Serilog记录所选的终结点属性 第3部分-使用Serilog.Asp ...