//晴神模板,dij+dfs,貌似最近几年PAT的的图论大体都这么干的,现在还在套用摸板阶段。。。。估计把这及格图论题题搞完,dij,dfs,并查集就掌握差不多了(模板还差不多)为何bfs能自己干出来,dfs就各种跪。。。。感觉需要把图论的经典算法都码一遍,才能有更深的理解,现在只是浅表

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn=501;
const int INF=1<<30;
int n,m,st,ed,g[maxn][maxn],cost[maxn][maxn];
bool vis[maxn]={false};
int dist[maxn],mincost=INF;
vector<int >pre[maxn];
vector<int>path,tmppath;
void dij(int s)
{
int i,j;
fill(dist,dist+maxn,INF);
for(i=0;i<n;i++)pre[i].push_back(i);
dist[s]=0;
for(i=0;i<n;i++)
{
int min=INF,u=-1;
for(j=0;j<n;j++)
{
if(!vis[j]&&dist[j]<min)
{
min=dist[j];
u=j;
}
}
if(u==-1)return ;
vis[u]=true;
for(int v=0;v<n;v++)
{
if(!vis[v]&&g[u][v]!=INF)
{
if(dist[v]>dist[u]+g[u][v])
{
dist[v]=dist[u]+g[u][v];
pre[v].clear();
pre[v].push_back(u);
}
else if(dist[v]==dist[u]+g[u][v])pre[v].push_back(u);
}
}
}

}
void dfs(int v)
{
int i;
if(v==st)
{
tmppath.push_back(v);
int tmpcost=0;
for(i=tmppath.size()-1;i>0;i--)
{
int cur=tmppath[i],next=tmppath[i-1];
tmpcost+=cost[cur][next];
}
if(tmpcost<mincost)
{
mincost=tmpcost;
path=tmppath;
}
tmppath.pop_back();
return ;
}
tmppath.push_back(v);
for(i=0;i<pre[v].size();i++)dfs(pre[v][i]);
tmppath.pop_back();
}
int main()
{
freopen("input.txt","r",stdin);
while(scanf("%d%d%d%d",&n,&m,&st,&ed)!=EOF)
{
int i,a,b;
fill(g[0],g[0]+maxn*maxn,INF);
fill(cost[0],cost[0]+maxn*maxn,INF);
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
scanf("%d%d",&g[a][b],&cost[a][b]);
g[b][a]=g[a][b];
cost[b][a]=cost[a][b];
}
dij(st);
dfs(ed);
for(i=path.size()-1;i>=0;i--)
printf("%d ",path[i]);
printf("%d %d\n",dist[ed],mincost);
}
return 0;
}

PAT1030. Travel Plan的更多相关文章

  1. PAT1030 Travel Plan (30)---DFS

    (一)题意 题目链接:https://www.patest.cn/contests/pat-a-practise/1030 1030. Travel Plan (30) A traveler's ma ...

  2. PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS

    PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...

  3. PAT1030. Travel Plan (30)

    #include <iostream> #include <limits> #include <vector> using namespace std; int n ...

  4. PAT 1030 Travel Plan[图论][难]

    1030 Travel Plan (30)(30 分) A traveler's map gives the distances between cities along the highways, ...

  5. 1030 Travel Plan (30 分)

    1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, toge ...

  6. [图算法] 1030. Travel Plan (30)

    1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, toget ...

  7. PAT_A1030#Travel Plan

    Source: PAT A1030 Travel Plan (30 分) Description: A traveler's map gives the distances between citie ...

  8. PAT 甲级 1030 Travel Plan (30 分)(dijstra,较简单,但要注意是从0到n-1)

    1030 Travel Plan (30 分)   A traveler's map gives the distances between cities along the highways, to ...

  9. HDU 4014 Jimmy’s travel plan(图计数)

    Jimmy’s travel plan Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

随机推荐

  1. jQuery插件:用于获取元素自身的HTML内容

    jQuery.fn.outerHTML = function(s) { return (s) ? this.before(s).remove() : $("<Hill_man>& ...

  2. java面试常考题

    基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...

  3. [转][色彩 A] – 永远不要使用纯黑

    原文地址:http://www.cgjoy.com/forum.php?mod=viewthread&tid=110762&extra=page%3D1%26filter%3Dtype ...

  4. C# STUDY

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  5. mysql事件

    文章参考自http://blog.163.com/duanpeng3@126/blog/static/8854373520105182123112/在使用这个功能之前必须确保event_schedul ...

  6. BIP_开发案例06_以RB.RDF为数据源BIP.RTF为模板的简单例子(案例)

    2014-05-31 Created By BaoXinjian

  7. CF 191C Fools and Roads lca 或者 树链剖分

    They say that Berland has exactly two problems, fools and roads. Besides, Berland has n cities, popu ...

  8. NeHe OpenGL教程 第十一课:飘动的旗帜

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  9. AD9 笔记:

    1 丝印压焊盘违反规则:关闭规则中的Manufacturing(制造规则)分类 >>> Silkscreen Over Component Pads Clearence(丝印与焊盘间 ...

  10. 使用Nlog记录日志到数据库

    Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中. 可以在这里下载Nlog:http://nlog-project.org/ 这里分享一下 ...