zoukankan      html  css  js  c++  java
  • hdu 2757 Ocean Currents(优先队列+bfs)

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

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

    后来,你懂的,果断拿下!在拿下的过程也经过一番厮杀,刚开始翻译惊现三十个错误,好吧,慢慢地找啊找,终于消灭所有错误,果断拿测试实例来测试,测试结果对的,果断提交上去,结果一个大大的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 ",ans);


    }
    }
    return 0;
    }



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









  • 相关阅读:
    数码管按键加减一
    单片机软件proteus的汉化步骤
    不同位数数字取个十百千位数字的代码
    直升机基础知识
    数码管应用digital_pile
    proteus中的常用文件
    蜂鸣器类代码
    延时函数sys
    求数组最大子数组
    Python数据结构与算法
  • 原文地址:https://www.cnblogs.com/riskyer/p/3262763.html
Copyright © 2011-2022 走看看