背景

天好热……Tina顶着那炎炎的烈日,向Ice-cream home走去……
可是……停电了……
冰淇淋们躺在Ice-cream home的冰柜里,慢慢地……慢慢地……融化…………
你说,她能赶在冰淇淋融化完之前赶到Ice-cream home去吗?

描述

给你一张坐标图,s为Tina的初始位置,m为Ice-cream home的位置,‘.’为路面,Tina在上面,每单位时间可以移动一格;‘#’为草地,Tina在上面,每两单位时间可以移动一格(建议不要模仿—毕竟Tina还小);‘o’是障碍物,Tina不能在它上面行动。也就是说,Tina只能在路面或草地上行走,必须绕过障碍物,并到达冰淇淋店。但是…………不保证到达时,冰淇淋还未融化,所以……就请聪明的你……选择最佳的方案啦…………如果,Tina到的时候,冰淇淋已经融化完了,那她可是会哭的。

输入格式

依次输入冰淇淋的融化时间t(0<t<1000),坐标图的长x,宽y(5<=x,y<=25){太长打起来好累……},和整张坐标图。

输出格式

判断按照最优方案是否可以赶在冰淇淋融化之前到达冰淇淋店(注:当T=最优方案所用时间,则判断为未赶到),如赶到,输出所用时间;如未赶到,输出Tina的哭声——“55555”(不包括引号)。

测试样例1

输入

11 
10 

......s... 
.......... 
#ooooooo.o 
#......... 
#......... 
#......... 
#.....m... 
#.........

输出

10

思路:
普通广搜+优先队列
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
struct node{
int x;
int y;
int dist;
friend bool operator < (node a,node b){
return a.dist > b.dist;
}
};
priority_queue<node> q;
int t,x,y,startx,starty,endx,endy,map[][],jud[][];
int dx[] = {-,,,};
int dy[] = {,-,,};
void input(){
cin>>t>>x>>y;
char cmd;
for(int i = ;i <= y;i++){
for(int j = ;j <= x;j++){
cin>>cmd;
if(cmd == '.') map[i][j] = ;
if(cmd == '#') map[i][j] = ;
if(cmd == 'o') map[i][j] = ;
if(cmd == 's'){
map[i][j] = ;
startx = j;
starty = i;
}
if(cmd == 'm'){
map[i][j] = ;
endx = j;
endy = i;
}
}
}
node tmp;
tmp.x = startx;
tmp.y = starty;
tmp.dist = ;
q.push(tmp);
for(int i = ;i <= ;i++){
for(int j = ;j <= ;j++){
jud[i][j] = ;
}
}
}
bool bfs(){
node now,next;
int nx,ny;
while(!q.empty()){
now = q.top();
q.pop();
for(int i = ;i < ;i++){
nx = now.x + dx[i];
ny = now.y + dy[i];
if(nx < || nx > x || ny < || ny > y || map[ny][nx] == ||jud[ny][nx] <= now.dist + map[ny][nx]) continue;
next.x = nx;
next.y = ny;
next.dist = now.dist + map[ny][nx];
if(nx == endx && ny == endy){
if(next.dist >= t) return false;
else{
cout<<next.dist<<endl;
return true;
}
}
q.push(next);
jud[ny][nx] = next.dist;
}
}
}
int main(){
input();
if(!bfs()) cout<<<<endl;
return ;
}

最新文章

  1. Builder模式
  2. 作业,备份,存储过程,sqlserver print 语句,输出字符串
  3. Javax.mail.NoSuchProviderException: smtp
  4. Zend-MVC intro
  5. PHP.4-DIV+CSS标准网页布局准备工作(下)
  6. Unity3d shader之SWAP Force Depth-of-Field Shader
  7. How do I Find Out Linux CPU Utilization?
  8. BD string 百度之星初赛的题目 数学
  9. Swift 项目中常用的第三方框架
  10. vector 利用swap 函数进行内存的释放 vector&lt;int&gt;().swap
  11. error:java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
  12. 修改Chrome默认的搜索引擎
  13. 如何创建应用程序包(C ++)
  14. PAT Basic 1065 单身狗
  15. 初学CSS-2-文本的属性
  16. Supervisor (进程管理利器) 使用说明 - 运维笔记
  17. poj 1631 最多能有多少条不交叉的线 最大非降子序列 (LIS)
  18. Python 自定义线程池
  19. kafka 主要内容介绍
  20. Exchanger的使用

热门文章

  1. Get 和 Post 使用篇(1)
  2. [USACO09NOV]灯Lights
  3. [NOI2003]Editor
  4. CentOS环境下下调整home和根分区大小
  5. bash、dash(/bin/bash和/bin/sh)的区别
  6. [转].net cookie版购物车
  7. SQL在一张表中根据父ID获取所有的子ID
  8. Floating-point exception
  9. (转)中国电信友华PT921、PT921G光猫设置路由,无线WIFI设置
  10. linux 拆分文件