这类带权的边的图,直接广搜不行,要加上优先队列,这样得到的结果才是最优的,这样每次先找权值最小的,代码如下

 #include <stdio.h>
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
typedef struct Node{
int x, y;
int step;
friend bool operator < (const Node &a, const Node &b)
{
return a.step > b.step;
}
}Node;
const int MAX = + ;
int N, M;
int Map[MAX][MAX];
int next[][] = {{, }, {, }, {, -}, {-, }};
Node s, e;
bool match(Node node)//判断是否到达终点
{
if (node.x == e.x && node.y == e.y)
return true;
return false;
}
bool check(Node node)//判断这个点是否能走
{
if (node.x < || node.y < || node.x >= N || node.y >= M || Map[node.x][node.y] == )
return false;
return true;
}
int bfs()
{
priority_queue<Node> q;//优先队列
q.push(s);
Node p1, p2;
while (!q.empty())
{
p1 = q.top();
q.pop();
for (int i = ; i < ; i++)
{
p2.x = p1.x + next[i][];
p2.y = p1.y + next[i][];
p2.step = p1.step + Map[p2.x][p2.y];
if (match(p2))
{
return p2.step;
}
if (check(p2))
{
Map[p2.x][p2.y] = ;
Node v = p2;
q.push(v);
}
}
}
return -;
}
int main()
{
char ch;
while (~scanf("%d%d", &N, &M) && N + M)
{
for (int i = ; i < N; i++)
{
for (int j = ; j < M; j++)
{
cin >> ch;
if (ch == 'Y')//起点
{
s.x = i;
s.y = j;
s.step = ;
Map[i][j] = ;
}
else if (ch == 'T')//终点
{
e.x = i;
e.y = j;
e.step = ;
Map[i][j] = ;
}
else if (ch == 'B')//普通砖块,权值为2
{
Map[i][j] = ;
}
else if (ch == 'E')//空地,权值为1
{
Map[i][j] = ;
}
else
{
Map[i][j] = ;//为0的时候表示此点不可走
}
}
}
printf("%d\n", bfs());
} return ;
}

NYOJ 284 坦克大战 bfs + 优先队列的更多相关文章

  1. nyoj 284 坦克大战 (优先队列)

    题目链接:http://acm.nyist.net/JudgeOnline/status.php?pid=284 特殊数据: 5 5 BBEEY EEERB SSERB SSERB SSETB 7 非 ...

  2. nyoj 284 坦克大战 简单搜索

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=284 题意:在一个给定图中,铁墙,河流不可走,砖墙走的话,多花费时间1,问从起点到终点至少 ...

  3. NYOJ 284 坦克大战 【BFS】+【优先队列】

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

  4. NYOJ 284 坦克大战 (广搜)

    题目链接 描述 Many of us had played the game "Battle city" in our childhood, and some people (li ...

  5. nyoj 483 Nightmare【bfs+优先队列】

    Nightmare 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Ignatius had a nightmare last night. He found him ...

  6. poj 2312 Battle City【bfs+优先队列】

      Battle City Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7579   Accepted: 2544 Des ...

  7. nyoj-----284坦克大战(带权值的图搜索)

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

  8. java制作简单的坦克大战

    坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象 ...

  9. 3D坦克大战游戏源码

    3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...

随机推荐

  1. 不同浏览器对parseInt方法解析的不同

    parseInt方法的作用是将字符串转换为数字 当parseInt解析的时候只有0x和非0开头的数字,浏览器解析都一致,例如”0xA1”或 “9”. 只有当开头为0的时候才出现不同.IE,chrome ...

  2. 《asp.net mvc3 高级编程》第二章 控制器

    一.控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,并且在响应时通常会修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流,输入数据的处理 ...

  3. linux指令tips

    1.调用命令使用应用名称免路径.   例如在路径 /usr/local/mobile/php538 建立了php应用,在调用php命令的时候,我们需要加路径访问 如 /usr/local/mobile ...

  4. MongoDB学习--高级查询 [聚合Group]

    Group大约需要一下几个参数. key:用来分组文档的字段.和keyf两者必须有一个 keyf:可以接受一个javascript函数.用来动态的确定分组文档的字段.和key两者必须有一个 initi ...

  5. Python环境配置及项目建立

    一.安装Python Python比较稳定的两个版本是Python 3.5和Python 2.7,我用的是Python 2.7,下载地址是:https://www.python.org/downloa ...

  6. connect函数

    TCP客户用connect函数来建立与TCP服务器的连接 int connect (int sockfd, const sockaddr * servaddr, socklen_t addrlen); ...

  7. spinner 下拉框控件

    spinnerMode=dropdown时,为下拉模式spinnerMode=dialog时,会在界面中间弹出Android:popupBackground=”#f0000000”,可以去除spinn ...

  8. Java System类

    java 不支持 全局方法 和 变量, system 类 中所有成员都是静态的, 而要引用这些变量和方法,可直接system作为前缀,

  9. 如何将github上的微信客户端类库能够通过composer工具下载

    我将自己开发的微信客户端类库放到了github上面去了. 然后我在我的项目里面添加了一个composer.json文件 内容如下 { "require": { "weix ...

  10. Web前端开发人员和设计师必读文章推荐

    推荐一个很好的学习资源: Web前端开发人员和设计师必读文章推荐[系列一] Web前端开发人员和设计师必读文章推荐[系列二] Web前端开发人员和设计师必读文章推荐[系列三] Web前端开发人员和设计 ...