小伙伴们真心被这道题惊呆了!刚开始是读题,题目都把小伙伴惊呆了,题目都读不懂!

在前面猴子小伙伴的帮助下,理解了一点点,又偷偷的在纸上写写画画,明白了题意!

后来,你懂的,果断拿下!在拿下的过程也经过一番厮杀,刚开始翻译惊现三十个错误,好吧,慢慢地找啊找,终于消灭所有错误,果断拿测试实例来测试,测试结果对的,果断提交上去,结果一个大大的Wrong Answer,又找啊,发现是自己的visit初始化问题,改了提交,终于出来了个Accepted;

题意:

这题首先给你一个表格,表格有0~7八种不同的数字,每种数字代表由该位置到一个特定的方向,由该位置到该位置上的数所指的方向的走一步,不消耗能量,如果不按该位置数所指的方向走,需消耗一个能量,题目要求求消耗最少的能量由起点到达终点,输出最少能量;

#include<stdio.h>

#include<string.h>
#include<queue>

using namespace std;

#define inf 99999999

struct node

{


int x,y,time;


friend bool operator<(node a,node b)


{


return a.time>b.time;


}

};

char map[1010][1010];

int visit[1010][1010];

int n,m;

int dir[8][2]={-1,0,-1,1,0,1,1,1,1,0,1,-1,0,-1,-1,-1};

int judge(int x,int y)

{


if(x>=1&&x<=n&&y>=1&&y<=m)


return 1;


return 0;

}

int bfs(int dx,int dy,int sx,int sy)

{


int j,a,b;


node i,o;


priority_queue<node>q;


i.x=dx;i.y=dy;


i.time=0;


q.push(i);


visit[dx][dy]=0;


while(!q.empty())


{


i=q.top();


q.pop();


a=i.x;


b=i.y;


if(a==sx&&b==sy)


return i.time;


for(j=0;j<8;j++)


{


o.x=dir[j][0]+i.x;


o.y=dir[j][1]+i.y;


if(!judge(o.x,o.y))


continue;


if(j==map[i.x][i.y]-'0')


o.time=i.time;


else


o.time=i.time+1;


if(visit[o.x][o.y]>o.time)


{


visit[o.x][o.y]=o.time;


q.push(o);


}


}


}


return 1;

}

int main()

{


int i,j,ans,t,dx,dy,sx,sy;


while(scanf("%d%d",&n,&m)!=EOF)


{


for(i=1;i<=n;i++)


scanf("%s",map[i]+1);

scanf("%d",&t);


while(t--)


{


for(i=1;i<=n;i++)


for(j=1;j<=m;j++)


visit[i][j]=inf;


scanf("%d%d%d%d",&dx,&dy,&sx,&sy);


ans=bfs(dx,dy,sx,sy);


printf("%d\n",ans);

}


}


return 0;

}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2757

hdu 2757 Ocean Currents(优先队列+bfs)的更多相关文章

  1. UVA 11573 - Ocean Currents(BFS+优先队列)

    UVA 11573 - Ocean Currents 题目链接 题意:给定一个海面.数字分别代表海流方向,顺着海流不用费能量,逆海流要费1点能量,每次询问给一个起点一个终点,问起点到终点耗费的最小能量 ...

  2. hdu - 1242 Rescue && hdu - 2425 Hiking Trip (优先队列+bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1242 感觉题目没有表述清楚,angel的朋友应该不一定只有一个,那么正解就是a去搜索r,再用普通的bfs就能过了 ...

  3. 【HDOJ】2757 Ocean Currents

    简单BFS. /* 2757 */ #include <iostream> #include <queue> #include <cstdio> #include ...

  4. hdu 1026 Ignatius and the Princess I【优先队列+BFS】

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1026 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  5. HDU 2717 Catch That Cow --- BFS

    HDU 2717 题目大意:在x坐标上,农夫在n,牛在k.农夫每次可以移动到n-1, n+1, n*2的点.求最少到达k的步数. 思路:从起点开始,分别按x-1,x+1,2*x三个方向进行BFS,最先 ...

  6. ZOJ 649 Rescue(优先队列+bfs)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  7. 【POJ3635】Full Tank 优先队列BFS

    普通BFS:每个状态只访问一次,第一次入队时即为该状态对应的最优解. 优先队列BFS:每个状态可能被更新多次,入队多次,但是只会扩展一次,每次出队时即为改状态对应的最优解. 且对于优先队列BFS来说, ...

  8. Codeforces 677D - Vanya and Treasure - [DP+优先队列BFS]

    题目链接:http://codeforces.com/problemset/problem/677/D 题意: 有 $n \times m$ 的网格,每个网格上有一个棋子,棋子种类为 $t[i][j] ...

  9. POJ 2449 - Remmarguts' Date - [第k短路模板题][优先队列BFS]

    题目链接:http://poj.org/problem?id=2449 Time Limit: 4000MS Memory Limit: 65536K Description "Good m ...

随机推荐

  1. ubutun 下webalizer 分析Apache日志

    http://www.webalizer.org/  配置Webalizer 我们可以通过命令行配置Webalizer,也可以通过配置文件进行配置.下面将重点介绍使用配置文件进行配置,该方法使用形式比 ...

  2. 基于Visual C++2013拆解世界五百强面试题--题6-double类型逆序

    请设计一个函数,不许用到字符串函数,用数学运算,将double类型数据转换,例如123.456转换成654.321 首先想到依次提取他的每一个位数,然后进行运算,移动每一位数到相应位置,结果相加就能逆 ...

  3. php:检测用户当前浏览器是否为IE浏览器

    /** * 检测用户当前浏览器 * @return boolean 是否ie浏览器 */ function chk_ie_browser() { $userbrowser = $_SERVER['HT ...

  4. Swift调用Objective C的FrameWork

    很多Github的库经过很多年的发展,源码都是OC写的,,所以,用Swift调用OC的库就是开发中难免遇到的的一个问题,本文以AFNetworking为例,讲解如何跨语言调用. 第一步 创建一个空的工 ...

  5. 使用数据库绑定ListBox控件

    1. The HTML Markup <div> <asp:ListBox ID="ListBox1" runat="server">& ...

  6. 《JavaScript权威指南》拾遗(上)

    一.语言基础         1.javascript中,只有null和undefined是无法拥有方法的值,它们都没有包装对象.typeof null == ‘object' , typeof un ...

  7. 重新生成IE02

    procedure ReBuild_IE02( pi_aac001 in number, po_fhz out varchar2, po_msg out varchar2) is type typ_t ...

  8. 一道TOPK问题

    今天遇到一道TOP k的变形题,题目大概意思是有10W个随机整数,然后对这些数进行如下操作: 1.当能被3整除时,将此数替换为此数和其它数两两相加的数,包括数本身 2.当不能被3整除时,将此数替换为原 ...

  9. MyEclipse10+Jdk1.7+OSGI+MySql实现CRUD数据库

    开发环境: Windows2008R2 64位置+MyEclipse10+jdk1.7.0_67+MySql5.5 软件安装:myeclipse-10.0-offline-installer-wind ...

  10. Android利用ViewFlipper实现屏幕切换动画效果

    1.屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面:一个个性化设置页面. 2.介绍ViewFilpper类 Vie ...