题目链接: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. 让nginx支持php和path_info(新版本)
  2. python xgboost用法_XGBoost类库使用小结
  3. 百度 UNIT 技术负责人揭秘:如何让你的对话系统更智能
  4. 2021计算机基础知识题库,2021~2021计算机基础知识练习题
  5. Jeecg-boot 2.4.6+ 多租户改造方案(涉及菜单部门角色等基础模块)
  6. 面向手绘图形,涵盖多个主题,CVPR 2022 SketchDL Workshop开始征稿!
  7. web.py+xheditor+ ajaxfileupload+新浪sae图片上传
  8. C-Wandering Robot 模拟
  9. vi编辑器常用命令大全
  10. 从狄仁杰的测字占卜到一淘网的Query分析
  11. c语言ch1与ch2什么意思,ch1和ch2是什么意思
  12. poscms清除html,POSCMS开源内容管理系统 v3.6.0 升级说明
  13. 视频超分修复,让重温经典影片有了新的可能
  14. 一个大学生的心灵告白:世界上最后一封情书
  15. Keras深度学习(2)-二分类问题之电影评论分类
  16. LVS的模式一:DR(直接路由)模式
  17. 学习加密(四)spring boot 使用RSA+AES混合加密,前后端传递参数加解密(方式一)
  18. 如何设计一张数据库表
  19. 聊聊Linux IO(上)
  20. 美容院管理系统(java)

热门文章

  1. 信贷系统——增加2种模式访问模式A模式(通过销售人员入户的)B模式(通过Erp入户的)
  2. SQL语句汇总(终篇)—— 表联接与联接查询
  3. SAP OO面向对象理论知识(部分一)
  4. “上升”华为碰撞“下降”联想
  5. 在D-H参数法里为什么只用四个参数就能完全定义一个具有6自由度的坐标系
  6. c++商店信息管理系统的设计与实现
  7. 系统结构图、程序流程图、数据流图
  8. When you believe
  9. you are an asshole
  10. 读书笔记:《过程咨询 III》