Description

共享单车走进烟台,小明决定尝试。小明启动共享单车app,轻松地找到附近的单车。那么问题来了,到最近的那辆单车,小明大约要走多少米呢?

现在简化问题。将地图设定成一个由100米*100米的像素块组成的二维平面区域。如果一个方块内有单车,则像素块显示为字符“x”;如果此方块内是可以通行的路,则显示为“.”;再如果方块是建筑物,则显示为“*”,建筑物不能通行。

小明在地图上的位置显示为“o”,可以朝,“上”、“下”、“左”,“右”,“左上”,“左下”,“右上”,“右下”八个方向走。下图所示为一个小明站在像素方块O,如果小明向右走到X,则走100米;如果向右上走,则走141米(不需要开方)。

假设小明和单车都在方块的中央。现在给出 T 幅根据以上规则建立的地图,地图行数和列数分别为 n 和 m,请分别估算小明要走多少米才能到最近的单车?

如果计算中出现小数,那么直接舍弃。最后的输出的结果为整型。
给出的地图中至少有一辆单车,如果最终无法到达单车的位置,输出-1。

Input

第1行,T,表示下面有 T 组测试数据
对于每组测试数据
(1)第1行,n和m ,表示地图的大小;
(2)第2行开始,给出具体的地图 。

Output

T行数据
每行1个整数,表示问题的解

Sample Input

2
3 8
.....x..
.o...x..
........
8 10
.***......
.***......
.***..x...
..........
.....*****
..o..*****
.......x..
...*******

Sample Output

400
523

AC代码如下:

 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = (int)1e2+2;
int mov[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};
typedef pair< int , pair<int,int> > piii;
typedef struct
{ll len;int x;int y;// bool operator <(const node & a) const// {//     return len>a.len;// }
}node;
bool vis[maxn][maxn];
int n,m;
inline bool able(int x, int y) {return !vis[x][y] && x>=0 && x<n && y>=0 && y<m ; }int BFS(int ox,int oy, map <pair<int,int>,int> mp)
{priority_queue <piii> q;  //无法用未定义<的struct node,但可以用pair 默认优先级从前到后  默认greaterq.push(make_pair(0 , make_pair(ox,oy)));  while(!q.empty()){int cx = q.top().second.first;int cy = q.top().second.second;ll clen = -q.top().first; q.pop();if(vis[cx][cy]) continue;vis[cx][cy] = 1;if( mp[make_pair(cx,cy)] ) return clen;   for(int i=0;i<8;i++){int add = 100;if(i>3) add = 141;int nx = cx + mov[i][0];int ny = cy + mov[i][1];int nlen = -(clen + add);   if(able(nx,ny)) q.push(make_pair(nlen , make_pair(nx,ny)));  }}return 0;
}
void solve()
{map <pair<int,int>,int> mp;cin>>n>>m;char Pixel;int ox,oy;for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>Pixel;vis[i][j] = Pixel=='*'? 1: 0;  if(Pixel =='o') ox = i, oy = j;if(Pixel=='x') mp[make_pair(i,j)] = 1;}int ans = BFS(ox,oy,mp); cout<<(!ans?-1:ans)<<endl;
}
int main(void)
{std::ios::sync_with_stdio(false),cin.tie(NULL),cout.tie(NULL);int T;  cin>>T;while(T--)  solve();
}
 

YTU 3166: 共享单车相关推荐

  1. [YTU](3166)共享单车 ---bfs

    3166: 共享单车 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 45  Solved: 19 [Submit][Status][Web Board ...

  2. 快速上手微软 “群策 MARO” 平台,打造简易的共享单车场景

    作者 | 王金予.石文磊 来源 | 微软研究院AI头条(ID:MSRAsia) 编者按:2020年9月,微软亚洲研究院发布了多智能体资源优化平台"群策 MARO",并在 Githu ...

  3. DCIC共享单车数据可视化教程!

    今天选取的地图是前几天利用数字中国创新大赛提供的共享单车数据做的一个可视化效果. 很多人询问制作方法,今天给大家介绍下. 自古有云,巧妇难为无米之炊,要做这种数据可视化,数据是关键.数据去哪里找呢?可 ...

  4. 共享单车取消月卡优惠 烧钱时代正式结束

    2019独角兽企业重金招聘Python工程师标准>>> 日前,摩拜.ofo正式取消了月卡优惠,月卡价格恢复到20元/月.在摩拜客户端上,月卡的价格已从此前的每月2元.每3个月5元的优 ...

  5. 共享单车哈罗王炸连出,OFO小心沦为炮灰

    在共享单车行业寒冬之际,哈罗单车却是好消息不断,先是12月4日宣布获得3.5亿美元的D1轮融资,昨天又再次宣布完成10亿元的D2轮融资,在这大家都勒紧裤腰带过日子的寒冬里,哈罗单车可谓是王炸连出,来了 ...

  6. 趁ofo退出美市场 Uber不计成本发展共享单车

    2019独角兽企业重金招聘Python工程师标准>>> 继ofo陆续退出美国多个城市之后,Uber把握当下机会,计划不计成本重点发展共享单车,与此同时,还降低对于汽车业务关注度. 据 ...

  7. 这个冬天,将是共享单车最艰难的时刻

    自从共享单车出现以来,几乎每一天都有新的话题,无论是正面的还是负面的,围绕着这个新事物讨论的我们,最关注的还是这个行业到底能够走多远? 6月份的时候,很多人因为京沪杭街头出现土豪金配色的共享单车而被刷 ...

  8. 关于共享单车的供电问题如何解决?

    关于共享单车的供电问题如何解决? 参考文章: (1)关于共享单车的供电问题如何解决? (2)https://www.cnblogs.com/strinkbug/p/6192849.html 备忘一下.

  9. 【正一专栏】共享单车那些事儿

    共享单车那些事儿 每天早上骑着共享单车从华景这边去暨南花园上班,虽然看似短短15分钟的车程,但是路上也是惊险不断.随着共享单车使用人群的不断扩大,没有自行车道的广州,骑单车的人只能往机动车道挤,共享单 ...

最新文章

  1. 2015.7.13 第五课 课程重点(z-index、overflow、浏览器兼容性)
  2. C#使用xpath简单爬取网站的内容
  3. jdbc操作mysql延时操作_关于jdbc通过Statement和PrepareStatement进行数据库批处理操作,以提供程序效率...
  4. JS实现子类调用父类的同名函数函数
  5. BZOJ3642 : [CEOI 2014] Cake
  6. IDEA常用提升开发效率的插件及快捷键(持续更新)
  7. C# 连接sql 2005
  8. HDU-1584蜘蛛牌
  9. mysql test run_MySQL自动测试框架
  10. linux 更新软件命令 失败,(2015.1.13 更新)联合DSDT和SSDT进行反编译——减少DSDT和SSDT错误的尝试...
  11. 织梦采集插件-简单好用织梦采集插件
  12. batchplot插件用法_batchplot批量打印怎么用?Batchplot(CAD批量打印工具)安装步骤
  13. 计算机网络中属于资源子网的是,属于计算机网络的资源子网
  14. android 家庭监控,最好的三款家庭安防智能监控APP
  15. vSphere配置NSX Edge网络
  16. Trojan.Win32.Scar.cjdy分析
  17. 关于Blender安装显示User installations are disabled via policy on the machine. 问题解决
  18. QtCreator-----Kits选项选择
  19. k8s部署prometheus + grafana
  20. 信奥中的数学学习资料汇总(2022.10.31)

热门文章

  1. 电脑硬盘主分区和逻辑分区的区别是什么
  2. Python 用Ursina引擎制作一个3D迷宫游戏
  3. 用python写一段计算autocad多段线长度的代码
  4. LaTex\TexStduio设置参考文献Bibtex
  5. win10如何显示html文件夹,Win10显示隐藏文件夹图标_Win10查看隐藏文件夹方法-192路由网...
  6. python sympy包符号运算进行定积分计算
  7. element-ui手风琴自定义html,element-ui中el-table expand 手风琴效果,展开里面的内容或者ta...
  8. 为OneFlow添加新的前端语言
  9. php手机号正则替换中间四位
  10. oracle替换手机号中间的4位为*号(姓名,手机号,邮箱脱敏)