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

 #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. 【NOI2006】最大获利

    [问题描述] 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU 集团旗下的CS&T 通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就 ...

  2. KB006: CSS 框模型( Box module )

    框和布局 在 KB005: CSS 层叠 中已经介绍了 CSS 的重要之处.CSS 可以说是页面表现的基础, CSS 可以控制布局,控制元素的渲染. 布局是讲在电影画面构图中,对环境的布置.人物地位的 ...

  3. Web工程师的工具箱

    RequestBin:允许你创建一个URL,利用这款工具进行收集请求,然后通过个性化方式进行检查. Hurl:发出HTTP请求,输入URL,设置标题,查看响应,最后分享给其他人.类似的工具有:REST ...

  4. ES5数组方法

    先标明参考出处: http://blog.csdn.net/codebistu/article/details/8049705 本来写过一篇有关数组新方法的(详见: [转]JavaScript函数和数 ...

  5. js中定义变量加var与不加var的区别?

    var 不一定是用来定义局部变量的 jscript的全局变量和局部变量的分界是这样的:                  过程体(包括方法function,对象Object o ={})外的所有变量不 ...

  6. 关于 mod_python

    首先声明 本文 翻译 别人的文章,文章的作者是 mod_python 项目的负责人,目前 mod_python已由 Apache维护.原文地址: http://www.onlamp.com/pub/a ...

  7. ListView OnScrollListener详解(滑屏分页显示数据)

    package com.action; import java.util.ArrayList; import java.util.List; import android.app.Activity; ...

  8. 修改一行和修改全表的TX锁

    SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE ---------- ---------- ------- ...

  9. COJ 0578 4019二分图判定

    4019二分图判定 难度级别: B: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给定一个具有n个顶点(顶点编号为0,1,… ...

  10. TRAFFIC LIGHTS POJ 1158

    题目大意: 在Dingilville 城市安排是一种不同寻常的方式,每个交叉路口有一条道路连接,一条道路最多连接两个不同的交叉路口.每个交叉路口不能连接他自己.道路旅行一端到另一端的时间是相同的,任何 ...