技术标签: ACM
题意:输出最短路径,若最短路径相同,则输出代价最小的路径。
思路:迪杰斯特拉算法,用path数组记录最短路径,path[a] = b,表示从源s到b的最短路径中,最后一跳是通过a到b的。故输出时,应该用栈将b入栈后,依次将path[]数组从后往前遍历进栈。然后输出栈即可。
#include <iostream>
#include <vector>
#include <cstring>
#include <stack>
using namespace std;
struct Node
{
int next, dis, cost;
};
vector<Node> edges[501];
bool visited[501];
int dist[501];
int cost[501]; //记录花费
int path[501]; //记录路径
void print(int d)
{
stack<int> S;
S.push(d);
int pre = path[d];
while(pre != -1)
{
S.push(pre);
pre = path[pre];
}
while(!S.empty())
{
cout << S.top() << " ";
S.pop();
}
}
void Dij(int n, int s)
{
memset(visited, 0 , sizeof(visited));
for(int i = 0; i < n; i++)
{
dist[i] = -1;
cost[i] = 0;
path[i] = -1;
}
visited[s] = true;
dist[s] = 0;
int newp = s;
for(int i = 0; i < n-1; i++)
{
//松弛操作
for(int j = 0; j < edges[newp].size(); j++)
{
int next = edges[newp][j].next;
int len = edges[newp][j].dis;
int weight = edges[newp][j].cost;
//最短路径不止一条
if(dist[next] == dist[newp]+len)
{
if(cost[next] > cost[newp] + weight)
{
cost[next] = cost[newp] + weight;
path[next] = newp;
}
}
if(dist[next] == -1 || dist[newp]+len < dist[next])
{
dist[next] = dist[newp] + len;
cost[next] = cost[newp] + weight;
path[next] = newp;
}
}
//找下一个newp
int min = 111111111;
for(int j = 0; j < n; j++)
{
if(visited[j] || dist[j] == -1)
continue;
if(dist[j] < min)
{
min = dist[j];
newp = j;
}
}
visited[newp] = true;
}
}
int main()
{
int n, m, s, d;
cin >> n >> m >> s >> d;
int a, b, x, y;
for(int i = 0; i < m; i++)
{
Node tmp;
cin >> a >> b >> x >> y;
tmp.next = b, tmp.dis = x, tmp.cost = y;
edges[a].push_back(tmp);
tmp.next = a;
edges[b].push_back(tmp);
}
Dij(n, s);
print(d);
cout << dist[d] << " " << cost[d] << endl;
return 0;
}
MediaRecorder.AudioSource.DEFAULT 默认音频源VOICE_CALL︰设定录音来源为语音拨出的语音与对方说话的声音。MIC︰设定录音来源为麦克风。CAMCORDER︰设定录音来源与同方向的相机麦克风相同,若相机无内置相机或无法设定时,则使用预设的麦克风。VOICE_COMMUNICATION摄像头旁边的麦克风VOICE_DOWNLINK:下...
来源:资本实验室二进制与伟大的计算机相结合,推动人类进入了信息化时代。在这个基于物质世界的,由0和1构成的新世界中,我们依靠算法和电子技术不断解决了大量曾经无法解决的问题...
1、查找的路径不同(1)#include<>:编译器直接从系统类库目录里查找头文件,比如在VS2013中:#include<stdio.h>那么编译器会直接在<Visual studio安装目录>\VC\include目录下查找到stdio.h这个文件,这就是编译器的类库目录。如果类库目录下查找失败,编译器会终止查找,直接报错:No such file or directore.(2)#include"":默认从项目当前目录查找头文件,.
关于多态的理解1. 什么是多态?2.使用多态的前提3.通过代码来理解多态的特性总结1. 什么是多态?多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。多态也称作动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。通俗地讲,只通过父类就能够引用不同的子类,这就是多态,我们只有...
来源:5G产业圈5G牌照的发放,对通信产业发展具有重要的战略意义。这不仅仅是为了5G商用,更赋予了多重目的。比如为了利用5G技术推动经济结构创新、促进经济增长、帮助华为中...
Oracle Form在开发时,有时会出现假锁--Forms 抛出FRM-40654(记录已经被另一个用户更新,重新查询以查看修改).这个问题也曾经折磨了我好久。总结出几点供大家参考看一看,还有没有写出的情况,请大家指点 1. 四舍五入 2.数据块中的某些项目的公式与视图中的公式不一致 3.数据块中的项目要设置主键是要唯一组合 4.数据块中的项目默认了值,而
一、渲染路径1、unity支持的渲染路径:前向渲染路径(Forword)、延迟渲染路径(Deferred)、顶点照明渲染路径(Vertex Lit)。2、可以在项目上设置、也可以在摄相机上设置或者在Shader上设置,在shader上利用LightMode标签实现。3、Pass的LightMode标签支持的渲染路径设置选项。LightMode标签支持的渲染路径设置选项 标签名 ...
学习目标:算法学习-Day16题库: 洛谷题库每天保持发布一篇Java或C算法题解!题目:给定一个数组,输出其中第二小的整数(相等的整数只计算一次)。输入格式:第一行,一个整数 n(1≤n≤100),表示数组长度。第二行,n 个绝对值小于 100 的整数。输出格式:一行。如果该数组存在第二小整数,则输出第二小整数。如果不存在,则输出NO。样例 1 :输入:41 2 2 -4输出:1样例 2 :输入:51 2 3 1 1输出:2思路: 题目要求输出第二小整
CentOS7 JDK 安装下载JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.html 选择合适的版本解压安装将压缩包上传到服务器上,然后进行解压 tar -zxvf jdk-8u161-linux-x64.tar.gz 创建文件夹保存mkdir /usr/local/j...
PyG实现自定义GAT层完整代码代码分析本系列中的第三篇介绍了如何调用pyg封装好的GAT函数,当然同样的,对于科研需求,我们同样需要学会如何自定义网络层以满足研究需求。完整代码import torchimport mathfrom torch_geometric.nn import MessagePassingfrom torch_geometric.utils import add_self_loops,remove_self_loops,softmaxfrom torch_geometr
转自:http://blog.163.com/hulin_feng/blog/static/923525320122270442267/MATLAB统计工具箱包括概率分布、方差分析、假设检验、分布检验、非参数检验、回归分析、判别分析、主成分分析、因子分析、系统聚类分析、K均值聚类分析、试验设计、决策树、多元方差分析、统计过程控制和统计图形绘制等。优化工具箱包括无约束最优化、有约束最优化、二次规