51nod 1459 迷宫游戏(bfs)

原创 2016年08月29日 10:51:29

1459 迷宫游戏
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了你的起点和终点房间,你首要目标是从起点尽快到达终点,在满足首要目标的前提下,使得你的得分总和尽可能大。现在问题来了,给定房间、道路、分数、起点和终点等全部信息,你能计算在尽快离开迷宫的前提下,你的最大得分是多少么?
Input

第一行4个整数n (<=500), m, start, end。n表示房间的个数,房间编号从0到(n - 1),m表示道路数,任意两个房间之间最多只有一条道路,start和end表示起点和终点房间的编号。
第二行包含n个空格分隔的正整数(不超过600),表示进入每个房间你的得分。
再接下来m行,每行3个空格分隔的整数x, y, z (0

#include<bits/stdc++.h>
using namespace std;

const int maxn=505;
const int inf=0x3f3f3f3f;
int n,m,S,E;
int grade[maxn];
vector<pair<int,int> > G[maxn];

pair<int,int> used[maxn];

struct note {
    int pos,gra,t;
    note(int aa=0,int cc=0,int dd=0) {
        pos=aa,gra=cc,t=dd;
    }
};

void bfs() {
    queue<note> que;
    while(!que.empty()) {
        que.pop();
    }
    que.push(note(S,grade[S],0));
    for(int i=1; i<=n; ++i) {
        used[i].first=inf;
        used[i].second=0;
    }
    used[S].first=0,used[S].second=grade[S];

    while(!que.empty()) {
        note now=que.front();
        que.pop();

        int pos=now.pos,tg=now.gra,tt=now.t;
        int len=(int)G[pos].size();
        if(pos==E) {
            continue;
        }
        for(int i=0; i<len; ++i) {
            int needt=G[pos][i].second,to=G[pos][i].first;
            if(used[to].first>used[pos].first+needt||
                    (used[to].first==used[pos].first+needt&&(used[to].second<used[pos].second+grade[to]))) {
                used[to].second=used[pos].second+grade[to];
                used[to].first=used[pos].first+needt;

                que.push(note(to,used[to].second,used[to].first));
            }
        }
    }
    printf("%d %d\n",used[E].first,used[E].second);
}
int main() {
    int X,Y,Z;
    while(~scanf("%d%d%d%d",&n,&m,&S,&E)) {
        ++S,++E;
        memset(grade,0,sizeof(grade));
        for(int i=1; i<=n; ++i) {
            G[i].clear();
            scanf("%d",&X);
            grade[i]=X;
        }
        while(m--) {
            scanf("%d%d%d",&X,&Y,&Z);
            ++X,++Y;
            G[X].push_back(make_pair(Y,Z));
            G[Y].push_back(make_pair(X,Z));
        }
        bfs();
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

51Nod-1459-迷宫游戏

ACM模版描述题解最短路径相关算法,这里使用Dijkstra算法,进行略微修改即可。默认起点是第一个结点,这里起点是Start,并且需要加上对结点权值的考虑。代码#include #include ...
  • f_zyj
  • f_zyj
  • 2016年07月30日 02:27
  • 575

51Nod 1459 迷宫游戏(dijkstra)

一道最短路问题,我是稍微变形一下dijkstra来做的 这道题不仅要求最短路,还要求最短路节点和的最大值。 这里有一个坑点就是存在多条最短路的时候要输出最短路径上节点和最大值 还有一个坑点就是这是一个...
  • zzycsx
  • zzycsx
  • 2015年11月14日 18:26
  • 875

POJ3984-迷宫问题

题目链接:POJ3984 很裸的题目,如果做过前面那个倒水的题目,那么这题很快就能AC了 给定起点和终点,就是要记录路径,很简单,上下左右四个方向,UDLR ,每次进队列的时候选择一个方向加入字符...
  • qq_34131212
  • qq_34131212
  • 2017年12月09日 13:40
  • 105

51nod 1459 迷宫游戏

1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次...
  • ACM_e
  • ACM_e
  • 2017年09月14日 17:47
  • 107

51Nod - 1459 迷宫游戏

你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规定了...
  • qq_36424540
  • qq_36424540
  • 2017年08月07日 16:21
  • 98

51nod 1459 迷宫问题 (Dijkstra或SPFA求最短路)

最短路算法的小变形。
  • zuzhiang
  • zuzhiang
  • 2017年10月21日 09:26
  • 109

51nod 1459 迷宫游戏

题目描述: 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第...
  • Chendehaial
  • Chendehaial
  • 2016年06月11日 11:06
  • 308

51NOD 1459迷宫游戏

51NOD 1459迷宫游戏 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外...
  • Elio_LosEr
  • Elio_LosEr
  • 2017年09月02日 15:09
  • 63

1459 迷宫游戏(51NOD)

你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。 还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个房间需要一些时间。游戏规...
  • vocaloid01
  • vocaloid01
  • 2017年08月08日 17:22
  • 55

51NOD 1459 迷宫游戏

貌似51nod和不错的样子。 点开基础题做了第一个。 最短路问题,多算一下得分就行了。 #include #include #include #include #include #inc...
  • dongshimou
  • dongshimou
  • 2015年08月17日 15:44
  • 1069
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51nod 1459 迷宫游戏(bfs)
举报原因:
原因补充:

(最多只允许输入30个字)