• [PAT] A1030 Travel Plan


    (经典算法 要熟练运用!)

    题目大意

    找最短路径,若路径长度相同,找最小花费。

    AC代码

    邻接矩阵

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<vector>
    #include<algorithm>
    #define INF 1000000000
    #define MAXV 600
    using namespace std;
    struct node {
    	int v;
    	int dis;
    	int cost;
    };
    vector<node>G[MAXV];
    int dis[MAXV], c[MAXV];
    bool vis[MAXV] = { false };
    int pre[MAXV];
    int n;
    void Dijkstra(int begin) {
    	fill(dis, dis + MAXV, INF);
    	fill(c, c + MAXV, INF);
    	dis[begin] = 0;
    	c[begin] = 0;
    	int i, j;
    	for (i = 0;i < n;i++) {
    		pre[i] = i;
    	}
    	for (i = 0;i < n;i++) {
    		int min = INF, u = -1;
    		for (j = 0;j < n;j++) {
    			if (vis[j] == false && dis[j] < min) {
    				min = dis[j];
    				u = j;
    			}
    		}
    		if (u == -1)return;
    		vis[u] = true;
    		for (j = 0;j < G[u].size();j++) {
    			int v = G[u][j].v;
    			if (vis[v] == false && dis[v] > dis[u] + G[u][j].dis) {
    				dis[v] = dis[u] + G[u][j].dis;
    				c[v] = c[u] + G[u][j].cost;
    				pre[v] = u;
    			}
    			else if (vis[v] == false && dis[v] == dis[u] + G[u][j].dis) {
    				if (c[v] > c[u] + G[u][j].cost) {
    					c[v] = c[u] + G[u][j].cost;
    					pre[v] = u;
    				}
    			}
    		}
    	}
    	return;
    }
    void DFS(int s, int v) {
    	if (v == s) {
    		printf("%d", s);
    		return;
    	}
    	DFS(s, pre[v]);
    	printf(" %d", v);
    }
    int main() {
    	int m, s, d;
    	scanf("%d%d%d%d", &n, &m, &s, &d);
    	int i, j;
    	int u, v;
    	for (i = 0;i < m;i++) {
    		node tempnode;
    		scanf("%d%d%d%d", &u, &v, &tempnode.dis, &tempnode.cost);
    		tempnode.v = v;
    		G[u].push_back(tempnode);
    		tempnode.v = u;
    		G[v].push_back(tempnode);
    	}
    	Dijkstra(s);
    	DFS(s, d);
    	printf(" %d %d", dis[d], c[d]);
    	return 0;
    }
    
  • 相关阅读:
    2020春Contest
    HDU Count the string (KMP)
    P1757 通天之分组背包
    L1-050 倒数第N个字符串
    3月份目标
    Division UVa725
    数三角
    luogu P2051 [AHOI2009]中国象棋 dp 状态压缩+容斥
    Codeforces Round #654 (Div. 2) E
    Codeforces Round #654 (Div. 2) D
  • 原文地址:https://www.cnblogs.com/yue36/p/12885573.html
Copyright © 2020-2023  润新知