zoukankan      html  css  js  c++  java
  • temporary

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int n, m, s, d;
    int e[510][510], cost[510][510], dis[510];
    int inf = 999999999;
    bool visit[510];
    vector<int> pre[510], temppath, path;
    int finalcost=inf;
    void dfs(int vv) {
        temppath.push_back(vv);
        if (vv == s) {
            int tempcost=0;
            for (int i = temppath.size()-1; i >0; i--) {
                int id = temppath[i], nextid = temppath[i - 1];
                tempcost += cost[id][nextid];
            }
            if (tempcost<finalcost) {
                finalcost = tempcost;
                path = temppath;
            }
            temppath.pop_back();
            return;
        }
        for (int i = 0; i < pre[vv].size(); i++) {
            dfs(pre[vv][i]);
        }
        temppath.pop_back();
    }
    int main() {
        cin >> n >> m >> s >> d;
        fill(e[0], e[0] + 510 * 510, inf);
        //fill(cost[0], cost[0] + 510 * 510, inf);
        fill(dis, dis+510, inf);
        //fill(visit, visit + 510, false);
        for (int i = 0; i < m; i++) {
            int a, b;
            scanf("%d%d", &a, &b);
            scanf("%d", &e[a][b]);
            e[b][a] = e[a][b];
            scanf("%d", &cost[a][b]);
            cost[b][a] = cost[a][b];
        }
        /*for (int i = 0; i < m; i++) {
            int c1, c2, di, co;
            cin >> c1 >> c2 >> di >> co;
            e[c1][c2] = e[c2][c1] = di;
            cost[c1][c2] = cost[c2][c1] = co;
        }*/
        pre[s].push_back(s);
        dis[s] = 0;
        for (int i = 0; i < n; i++) {
            int u = -1, min = inf;
            for (int j = 0; j < n; j++) {
                if (visit[j] == false &&dis[j]<min) {
                    min = dis[j];
                    u = j;
                }
            }
            if (u == -1)break;
            visit[u] = true;
            for (int v = 0; v < n; v++) {
                if (visit[v] == false&&e[u][v]!=inf) {
                    if (dis[v] > dis[u] + e[u][v]) {
                        dis[v] = dis[u] + e[u][v];
                        pre[v].clear();
                        pre[v].push_back(u);
                    }
                    else if (dis[v] == dis[u] + e[u][v]) {
                        pre[v].push_back(u);
                    }
                }
            }
            dfs(d);
            for (int i = path.size() - 1; i >= 0; i--)
                printf("%d ", path[i]);
            printf("%d %d", dis[d], finalcost);
        }
        return 0;
    }
  • 相关阅读:
    js,timeout,promise执行顺序
    vue数据响应的坑
    css中的block与none
    javascript 私有化属性,和公共属性
    animal与@keyframe
    css3中的translate,transform,transition的区别
    AngularJS实现原理
    bootstrap添加多个模态对话框支持
    ajax
    jQuery点击弹出层,弹出模态框,点击模态框消失
  • 原文地址:https://www.cnblogs.com/masayoshi/p/10867303.html
Copyright © 2011-2022 走看看