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 ...
随机推荐
- JavaScript: bind apply call
var foo = function(age,sex){ console.log(this.name,age,sex); }; //call将改变函数运行的context foo.call({name ...
- 帝国CMS 6.0功能解密之新版结合项功能,帝国结合项使用
可以用来做A-Z信息检索 某字段等于多少,输出 等等 帝国CMS6.0在继承以往版本结合项功能的基础上又新增很多特性,更强大.今天我们就专门来讲解6.0的结合项改进. 回顾下以往版本的结合项语 ...
- CSS如何实现图片上下垂直居中
方法一: 使用margin方式,使图片在div中上下垂直居中.margin-top值的计算方式是:div的高度/2-图片高度/2. 代码实例如下: <!DOCTYPE html><h ...
- mongodb 数据导入导出
mongoexport 命令异常方便简单强大! 连接数据库: jkmiao@jkmiao-ipin:~$ mongo 192.168.1.xx:xxx/jd_58tc_raw 1. 导出10条数据到 ...
- java基础-排序
冒泡排序 选择排序 生成数组,数组元素值为1-1000
- 关于JavaScript中apply与call的用法意义及区别(转)
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. cal ...
- Ext vtype
//form验证中vtype的默认支持类型1.alpha //只能输入字母,无法输入其他(如数字,特殊符号等)2.alphanum//只能输入字母和数字,无法输入其他3.email//email验证, ...
- Redis链接上不的问题
问题描述: 同样配置的redis及系统环境,在两台服务器(A.B两台服务)上部署,但是其中一台(A),运行一段时间,就链接不上了,从开始运行redis到redis链接不上,这个时间间隔,不一定有时候是 ...
- cocos2dx 菜单按钮回调方法传参 tag传参
.h文件 void menuCallBack(CCObject* pSender); .cpp CCMenuItemSprite* item = CCMenuItemSprite::create( m ...
- Oracle 的过程与函数
一.过程 1 .过程创建和调用 过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用.可以使用过程存储数据库中频繁使用的应用逻辑.当执行一个过程时,其语句被 ...