PAT1030. Travel Plan
//晴神模板,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的更多相关文章
- PAT1030 Travel Plan (30)---DFS
(一)题意 题目链接:https://www.patest.cn/contests/pat-a-practise/1030 1030. Travel Plan (30) A traveler's ma ...
- PAT-1030 Travel Plan (30 分) 最短路最小边权 堆优化dijkstra+DFS
PAT 1030 最短路最小边权 堆优化dijkstra+DFS 1030 Travel Plan (30 分) A traveler's map gives the distances betwee ...
- PAT1030. Travel Plan (30)
#include <iostream> #include <limits> #include <vector> using namespace std; int n ...
- PAT 1030 Travel Plan[图论][难]
1030 Travel Plan (30)(30 分) A traveler's map gives the distances between cities along the highways, ...
- 1030 Travel Plan (30 分)
1030 Travel Plan (30 分) A traveler's map gives the distances between cities along the highways, toge ...
- [图算法] 1030. Travel Plan (30)
1030. Travel Plan (30) A traveler's map gives the distances between cities along the highways, toget ...
- PAT_A1030#Travel Plan
Source: PAT A1030 Travel Plan (30 分) Description: A traveler's map gives the distances between citie ...
- 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 ...
- HDU 4014 Jimmy’s travel plan(图计数)
Jimmy’s travel plan Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
随机推荐
- HashMap 实现原理(复习)
1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1 ...
- PLSQL_数据泵定参数批量导入多表Expdp/Impdp Parfile(案例)
2015-04-01 Created By BaoXinjian
- mysql给日期增减
有个需求就是判断过期的供求信息,如果用户刷新了则判断过期日期是否小于现在,如果是则自动推迟7天. IF(expire<NOW(),DATE_ADD(NOW(), INTERVAL 7 DAY), ...
- 获取mysql数据表中的列名
select COLUMN_NAME from information_schema.columns where table_name='table_name' DESCRIBE table_name ...
- 内网Linux对公网开启SSH
1.首先你得装个Linux,过程就不说了.Linux可以装在Vmware上,但是网络适配器选项选的是桥接模式 2.在linux上安装SSH服务,如果有就自动忽略 3.在路由器上开启端口映射. 这里我用 ...
- JAVA用户数据输入
数据输入 首先需要导入扫描仪 然后声明扫描仪 输出输入提示 接收用户数据的数据 输出用户数据的数据 实例: import java.util.Scanner; //导入扫描仪 public class ...
- MySQL 绿色版安装方法图文教程
一.下载,这里使用绿色解压缩版 http://mirror.services.wisc.edu/mysql/Downloads/MySQL-5.1/mysql-noinstall-5.1.32-win ...
- 使用Async和Await进行异步编程(C#版 适用于VS2015) z
你可以使用异步编程来避免你的应用程序的性能瓶颈并且加强总体的响应.然而,用传统的技术来写异步应用是复杂的,同时编写,调试和维护都很困难. VS2012介绍了简单的方法,那就是异步编程,它在.Net F ...
- solr学习之添加文档
一.开篇语 其实Solr就是一个你可以通过他来查询文档的东西,他整个都是基于Document的,那么这些Document从何而来列? 当然是我们给他,而这些来源就包括了:数据库文件,XML,Json ...
- springmvc对请求执行流程
doService-->getHandlerMapping-->handlerMapping-->getHandler-->HandlerExecutionChain--> ...