题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284

BFS求最短路,这个题走到‘B’点是要花费2个时间,'E‘是1个时间,所以要用一个优先队列,优先级就是花费小的先出队,其余的就是模板了。

代码:

#include <cstdio>
#include <cstring>
#include <queue>using namespace std;#define inf 0x3f3f3f3f
int stx,sty;
int enx,eny;
int n,m;
int v[305][305];typedef struct p
{int x,y;int step;
} Node;
struct cmp
{bool operator()(const Node a,const Node b){return a.step > b.step;}
};
int dx[] = {-1,0,1,0};
int dy[] = {0,1,0,-1};
char s[305][305];
priority_queue<Node,vector<Node>,cmp> pq;
int flag;
int bfs(){memset(v,0,sizeof v);Node start;start.x = stx;start.y = sty;start.step = 0;pq.push(start);while(!pq.empty()){Node head = pq.top();pq.pop();for(int i = 0; i < 4; ++i){Node t;t.x = head.x + dx[i];t.y = head.y + dy[i];if(t.x == enx && t.y == eny){return head.step + 1;}if(t.x < 0 || t.x > n - 1 || t.y < 0 || t.y > m - 1 ||s[t.x][t.y] == 'R'|| s[t.x][t.y] == 'S')continue;if(!v[t.x][t.y]){if(s[t.x][t.y] == 'B')t.step = head.step + 2;else if(s[t.x][t.y] == 'E')t.step = head.step + 1;pq.push(t);v[t.x][t.y] = 1;}}}return -1;
}
void clear(){while(!pq.empty())pq.pop();
}
int main(){while(~scanf("%d%d",&n,&m),m + n){for(int i = 0; i < n; ++i){scanf("%s",s[i]);for(int j = 0; j < m; ++j)if(s[i][j] == 'Y'){stx = i;sty = j;}else if(s[i][j] == 'T'){enx = i;eny = j;}}//printf("%d %d %d %d\n",stx,sty,enx,eny);printf("%d\n",bfs());clear(); // 一定要有这个,否则WA}return 0;
}

NYOJ284坦克大战相关推荐

  1. NYOJ-284 坦克大战

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" i ...

  2. nyoj284 坦克大战(dijkstra(bfs+优先队列))

    题目284 题目信息 运行结果 本题排行 讨论区 坦克大战 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 3 描述 Many of us had played the ga ...

  3. NYOJ284坦克大战广度搜索

    原题地址:点击打开链接 深搜超时,用广度搜索,由于碰到'B'时需要先将墙销毁,该步的实现方法,可以先将该点加入队列,出队时判断,如果是墙('B')就先变成空('E')在加入队列即可. #include ...

  4. 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统

    对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...

  5. 用Python实现坦克大战游戏 | 干货贴

    作者 | 李秋键 出品 | AI科技大本营(rgznai100) <坦克大战>是1985年日本南梦宫Namco游戏公司在任天堂FC平台上,推出的一款多方位平面射击游戏.游戏以坦克战斗及保卫 ...

  6. stg游戏c语言,坦克大战改版

    <坦克大战改>是一款国内玩家模仿FC经典游戏坦克大战所自制的小游戏,游戏中玩家将会控制坦克保卫基地,一旦基地失守关卡就会失败.游戏支持手柄震动 ,同时包含有关卡编辑器,让玩家能够自由编辑关 ...

  7. 坦克大战java_java版坦克大战游戏源码

    [java]代码库package tankwar; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; imp ...

  8. android studio写坦克大战代码_GitHub 项目推荐:俄罗斯小游戏、Markdown 幻灯片、头像生成器、Logo 制作、坦克大战...

    今天跟大家分享一下,过去几天在各大社交平台分享的一些开源项目. 本周新增了粉丝推荐环节,如果你有发现优质的开源项目,欢迎在公众号或其它平台私信推荐,我们会不定期筛选推送. 小编推荐 俄罗斯方块小游戏 ...

  9. Java课程设计——坦克大战

    坦克大战--坦克类 一. 团队课程设计博客链接 https://www.cnblogs.com/chenhuilin/p/10275664.html 二.个人负责模块和任务说明 模块:坦克类(玩家坦克 ...

最新文章

  1. 【⚠️阴沟里翻船,这题都做错了!⚠️】C语言宏定义
  2. JAVA 文件监控 WatchService
  3. 提高网站的性能----回流与重绘
  4. Nubiers to follow
  5. Linux策略路由--原理、配置和应用
  6. webWMS开发过程记录(三)- 需求分析(略)
  7. JDK动态代理执行过程分析
  8. html带表单和div的素材,用DIV+CSSwe标准布局网页表单的一个例子
  9. item_review - 获得淘宝商品评论
  10. MarkDown下载和安装图文教程
  11. [java毕业设计]SSM+Mysql高校就业管理系统
  12. 不 只{`pyr_PYR的完整形式是什么?
  13. IE 0day,2010传说中的攻击Google等公司的代码
  14. 国际期刊出版趋势及科技论文写作要点
  15. mpeg1视频解码标准简介
  16. VxRail升级软件/固件版本
  17. c语言自动安装打印机驱动,安装自定义的即插即用打印机驱动程序
  18. android 高德地图定位缓慢,Android高德地图定位逻辑优化
  19. vue项目内存溢出的解决
  20. Apache Flink 1.14.4 on yarn ha环境搭建

热门文章

  1. 【宝塔面板】紧急安全更新通知
  2. 2022年初级审计师考试复习题及答案
  3. 计算机专业个人年度总结,计算机教学年度个人工作总结
  4. 两万字长文总结,梳理 Java 入门进阶哪些事
  5. mysql 分桶_mysql的分组和过滤桶where的组合运用
  6. mysql advisor github_GitHub - zyw/sqladvisor-web: 美团SQLAdvisor SQL优化建议工具的Web版,告别命令行...
  7. java中IO流的相关知识
  8. 从五个方面解说:数字技术对就业的有怎样的影响,你知道吗?
  9. 自然语言处理(十三):从零开始构建人名分类器
  10. js判断客户端访问是安卓还是ios