1030 Travel Plan (30 分)(最短路径 and dfs)

Posted chenchen-12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1030 Travel Plan (30 分)(最短路径 and dfs)相关的知识,希望对你有一定的参考价值。

技术分享图片

#include<bits/stdc++.h>

using namespace std;
const int N=510;
const int inf=0x3f3f3f3f;
int mp[N][N];
bool vis[N];
int dis[N];
int n,m,s,D;
int cost[N][N];
vector<int>path[N];
void Dijkstra()
{
    fill(vis,vis+N,false);
    fill(dis,dis+N,inf);
    for(int i=0;i<n;i++) dis[i]=mp[s][i];
    dis[s]=0;
    for(int i=0;i<n-1;i++){
        int u=-1;
        int minn=inf;
        for(int j=0;j<n;j++){
            if(!vis[j]&&dis[j]<minn){
                u=j;
                minn=dis[j];
            }
        }
        if(u==-1) return;
        vis[u]=true;
        for(int j=0;j<n;j++){
            if(!vis[j]&&dis[u]+mp[u][j]<=dis[j]){
                if(mp[u][j]+dis[u]<dis[j]){
                    dis[j]=mp[u][j]+dis[u];
                    path[j].clear();
                    path[j].push_back(u);
                }
                else{
                    path[j].push_back(u);
                }
            }
        }

    }
}
vector<int>t,p;
int minn=inf;
void dfs(int v)
{

    if(v==s){
        t.push_back(v);
        int sum=0;
        for(int i=t.size()-1;i>0;i--){
            int a=t[i];
            int b=t[i-1];
            sum+=cost[a][b];
        }
        if(sum<minn){
            minn=sum;
            p=t;
        }
        t.pop_back();
        return;
    }
    t.push_back(v);
    for(int i=0;i<path[v].size();i++){
        dfs(path[v][i]);
    }
    t.pop_back();

}
int main()
{
    fill(cost[0],cost[0]+N*N,0);
    fill(mp[0],mp[0]+N*N,inf);
    scanf("%d %d %d %d",&n,&m,&s,&D);
    while(m--){
        int a,b,c,d;
        scanf("%d %d %d %d",&a,&b,&c,&d);
        mp[a][b]=mp[b][a]=c;
        cost[a][b]=cost[b][a]=d;
    }
    Dijkstra();
    dfs(D);
    for(int i=p.size()-1;i>=0;i--){
        printf("%d ",p[i]);
    }
    printf("%d %d
",dis[D],minn);
    return 0;
}

 

以上是关于1030 Travel Plan (30 分)(最短路径 and dfs)的主要内容,如果未能解决你的问题,请参考以下文章

1030 Travel Plan (30分)

A1030 Travel Plan (30分)

1030 Travel Plan (30 分)

1030 Travel Plan (30 分)

1030 Travel Plan (30)(30 分)

PAT 1030 Travel Plan[图论][难]