7-9 旅游规划 (25 分)(Dijkstra算法)

题意: 

7-9 旅游规划 (25 分)(Dijkstra算法)_第1张图片

 思路:单源最短路问题,Dijkstra算法搞定就可以了,因为要找出最便宜的最短路,所以需要在更新最短距离的时候加一个条件(即当最短距离相等的时候,如果该路径的花费更小,就更新最小花费)就可以了。之前自己学的最短路的水平也就仅限于模板题的水平,现在可以在条件上稍微加一些变化,做了数据结构的作业,顺便加深了自己对最短路(Dijkstra)算法的理解。

题目所给样例的示意图(数据放在了代码的后边):

7-9 旅游规划 (25 分)(Dijkstra算法)_第2张图片

代码: 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define INF 0x3f3f3f3f
#define FRE() freopen("in.txt","r",stdin)

using namespace std;
typedef long long ll;
typedef pair P;//first是距离,second是点的编号
const int maxn = 1000;
struct Edge{
    int to,c,d;
    Edge(int t,int cost,int dis):to(t),c(cost),d(dis){}
};
vector G[maxn];
priority_queue, greater

> que; int dist[maxn],cost[maxn]; int n,m,st,en; void init(){ int s,e,d,c; scanf("%d%d%d%d",&n,&m,&st,&en); for(int i = 0; i dist[v])continue; //cout<<"v: "< dist[v]+e.d)||(dist[e.to] == dist[v]+e.d && cost[e.to] > cost[v]+e.c)){ dist[e.to] = dist[v]+e.d; cost[e.to] = cost[v]+e.c; //cout<<" cost: "<

 

你可能感兴趣的:(最短路算法)