PAT程序设计考题——甲级1030(Travel Plan) C++实现
来源:互联网 发布:sql delete 删除列 编辑:程序博客网 时间:2024/06/12 18:40
点击打开pat链接
#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
struct highway{
int end;
int distance;
int cost;
};
vector<highway> ad[maxn];
bool visit[maxn]={false};
int cost[maxn]={0};
int dis[maxn];
int pre[maxn];
void dij(int s,int city){
fill(dis,dis+city,INF);
fill(cost,cost+city,INF);//注意边的初始化的特点
dis[s]=0;
cost[s]=0;
for(int i=0;i<city;i++)
{pre[i]=i;
}//注意pre的初始化
for(int i=0;i<city;i++)
{
int store=-1,min=INF;
for(int j=0;j<city;j++)
{
if(visit[j]==false)
{
if(dis[j]<min)
{
store=j;
min=dis[j];
}
}
}
if(store==-1) return;
visit[store]=true;
for(int k=0;k<ad[store].size();k++){
int end=ad[store][k].end;
// cout<<end<<endl;
if(visit[end]==false)
{
int qw=dis[store]+ad[store][k].distance;
if(dis[end]>qw)
{
dis[end]=qw;
cost[end]=cost[store]+ad[store][k].cost;
pre[end]=store;
}
else if(dis[end]==qw)
{ if(cost[end]>cost[store]+ad[store][k].cost)
{
cost[end]=cost[store]+ad[store][k].cost;
pre[end]=store;
}
}
}
}
}
}
void DFS(int v,int s)//打印
{
if(v==s){
cout<<s<<" "; return;
}
DFS(pre[v],s);
cout<<v<<" ";
}
int main()
{ int city,hnum,st,ed;
cin>>city>>hnum>>st>>ed;
for(int i=0;i<hnum;i++)
{ int start,end,distance,cost;
cin>>start>>end>>distance>>cost;
highway temp;
temp.end=end,temp.distance=distance,temp.cost=cost;
ad[start].push_back(temp);
temp.end=start;
ad[end].push_back(temp);
}
dij(st,city);
DFS(ed,st);
cout<<dis[ed]<<" "<<cost[ed];
return 0;
}
- PAT程序设计考题——甲级1030(Travel Plan) C++实现
- PAT程序设计考题——甲级1065( A+B and C (64bit) ) C++实现
- PAT甲级1030. Travel Plan(30)
- PAT程序设计考题——甲级1007 (最大连续子序列和) C++实现
- PAT程序设计考题——甲级1045 (最长不下降子序列) C++实现
- PAT程序设计考题——甲级1045 (最长公共子序列) C++实现
- PAT程序设计考题——甲级1040 (最长回文串) C++实现
- PAT程序设计考题——甲级1068 (背包问题) C++实现
- PAT程序设计考题——甲级1042(洗牌机) C++实现
- PAT程序设计考题——甲级1046(循环最短距离) C++实现
- PAT程序设计考题——甲级1001( A+B Format ) C++实现
- PAT程序设计考题——甲级1002(A+B for Polynomials ) C++实现
- PAT程序设计考题——甲级1005( Spell It Right ) C++实现
- PAT程序设计考题——甲级1057( stock 分块查询) C++实现
- PAT程序设计考题——甲级1008( elevator) C++实现
- PAT程序设计考题——甲级1017(Queueing at Bank ) C++实现
- PAT程序设计考题——甲级1014( Waiting in Line ) C++实现
- PAT程序设计考题——甲级1098(Insertion or Heap Sort ) C++实现
- 备注一下M-learning
- linux下支持php程序
- 大型网站架构之分布式消息队列
- Win7 Zookeeper的下载与安装
- Angular2/4 在html模板里加入<scprit>标签,引用ckeditor的办法
- PAT程序设计考题——甲级1030(Travel Plan) C++实现
- 【学习笔记】图论 Tarjan LCA 割点 桥 暑假7.5
- 数据库(上)
- 用友uap nc65开发-使用自定义公式解决参照多显问题
- 官网说明:Python 2 or 3区别
- Action对象
- mysql 常用函数分享
- 【备忘】零基础学习python
- PopWindow实现二级联动菜单