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 迷宫游戏

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

51nod--1459 迷宫游戏 (dijkstra)

1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

51Nod 1459 迷宫游戏

1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,...

51NOD 1459 迷宫游戏

貌似51nod和不错的样子。 点开基础题做了第一个。 最短路问题,多算一下得分就行了。 #include #include #include #include #include #inc...

51Nod - 1459 迷宫游戏

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

51nod 1459 迷宫游戏

1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就...

51Nod-1459-迷宫游戏

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

51Nod 1459 迷宫游戏

题目链接:迷宫游戏题目 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分数。还有若干双向道路连结这些房间,你沿着这些道路从一个房间走到另外一个...

51nod 1459 迷宫游戏Dijkstra变形

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

1459 迷宫游戏

题目描述基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 你来到一个迷宫前。该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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