b1002 All Roads Lead to Rome

题目:https://www.nowcoder.com/pat/5/problem/4315

题意:

回家路线有很多条,现在有n个地点(包括家),每个城市都有幸福感(除了出发城市),现在找出一条最短路,

当路径一样,选择幸福感最大的路线,当幸福感一致,选择平均幸福感最大的路线(不包含出发城市)。

输入

n城市个数,e条边,出发城市

接下来n-1行,每个城市的幸福感

接下来e行,每个城市的距离

输出

最短距离的路线总数,最短距离,幸福感总量,幸福感平均值

最优解路径

输入例子:

6 7 HZH
ROM 100
PKN 40
GDN 55
PRS 95
BLN 80
ROM GDN 1
BLN ROM 1
HZH PKN 1
PRS ROM 2
BLN HZH 2
PKN GDN 1
HZH PRS 1

 

输出例子:

3 3 195 97
HZH->PRS->ROM

代码:

#include 
#include 

using namespace std;
const int maxn = 205;
const int INF = 1000000000;

struct node
{
    int v,l;
    node(int _v,int _l):v(_v),l(_l){};
};
vector adj[maxn];
int val[maxn];
int dist[maxn];
int inq[maxn];
map cmap;
map scmap;
int n,e;
vector pre[maxn];
vector tempPath,path;
int routes,cost,hap,avghap,sum;
void SPFA()
{
    int s=cmap["ROM"];
    for(int i=0;i<=n;i++)
    {
        dist[i]=INF;
    }
    dist[s]=0;
    queue q;
    while(!q.empty()) q.pop();
    inq[s]=1;
    q.push(s);  //千万别忘记压入
    while(!q.empty())
    {
        int u = q.front();
        q.pop();
        inq[u]=0;   //这个千万别少了,防止同一节点多次放入
        for(int i=0;i=0;i--)
        {
            tempHap+=val[tempPath[i]];
        }
        tempCost = dist[tempPath[0]];
        tempSum = tempPath.size()-1;
        if(tempHap>hap||((tempHap==hap)&&(tempSum");
        int u = path[i];
        string name = scmap[u];
        printf("%s",name.c_str());
    }
    return 0;
}

 

你可能感兴趣的:(PAT甲级及顶级,图论:最短路径)