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

 #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. ggts下载地址

    地址:http://spring.io/tools/ggts See All Versions可以下载更多版本,里面包含安装版和解压版

  2. Bootstrap_排版_列表

    一.基本列表 <h5>普通列表</h5> <ul> <li>列表项目</li> <li>列表项目</li> < ...

  3. JS笔记2 --定义对象

    16.javascript中定义对象的几种方式(javascript中没有类的概念,只有对象): 1)基于已有对象扩充其属性和方法: var object = new Object(); object ...

  4. 多目标遗传算法 ------ NSGA-II (部分源码解析) 目标函数值计算 eval.c

    这部分比较简单,具体的函数数值计算是需要调用设定的目标函数的,此部分一个不能忽略的问题是  超出限制条件的处理 , 故对此加以解释. 首先是包装函数, 核心操作调用  evaluate_ind  实现 ...

  5. Skynet:特性收集

    基于云风的 blog,收集 skynet 的特性以便将来在代码中一一验证. “ ... ” 部分节选自云风的 BLOG. 1. 基于 Erlang-Actor 模式的 C 实现 “把一个符合规范的 C ...

  6. Installshield更新时,新加dll未拷贝至安装目录问题完美解决【原创】

    最近在发现在开发过程中新增的目录或文件(特别是dll\ocx\exe等二进制文件),在升级安装时拷贝失败. 经过一周的研究,完美解决办法: 对于新增的文件或目录,放到一个新的component中,并且 ...

  7. UGUI穿透3D世界判断&&UGUI全事件监听

    public bool isPointUI(){ PointerEventData eventDataCurrnt = new PointerEventData (EventSystem.curren ...

  8. VS2013程序打包部署(图解),vs2013部署

    VS2013程序打包部署(图解),vs2013部署 首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方 ...

  9. centos7 install mysql

    1. 下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2. 安装mysql-co ...

  10. Android Service之LOCATION_SERVICE

    Android提供了GPS功能 LocationManager obj = (LocationManager)getSystemService(Context.LOCATION_SERVICE) Pe ...