Dijkstra HDU 1874
来源:互联网 发布:实名淘宝小号单个购买 编辑:程序博客网 时间:2024/05/20 09:21
#include<vector>
#include<queue>
using namespace std;
/*
Dijkstra的算法思想:
在所有没有访问过的结点中选出dis(s,x)值最小的x
对从x出发的所有边(x,y),更新
dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y))
*/
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
const int inf = 1 << 27;
struct node{
int x, d;
node(){}
node(int a, int b){ x = a; d = b; }
};
bool operator <(node a, node b)
{
if (a.d == b.d) return a.x<b.x;
else return a.d > b.d;
}
vector<node>eg[1005];
int dis[1005], n,m;
void Dijkstra(int s)
{
for (int i = 0; i <= n; i++)dis[i] = inf;
dis[s] = 0;
priority_queue<node>q;
q.push(node(s, dis[s]));
while (!q.empty())
{
node x = q.top();
q.pop();
for (int i = 0; i < eg[x.x].size(); i++)
{
node y = eg[x.x][i];
if (dis[y.x]>x.d + y.d)
{
dis[y.x] = x.d + y.d;
q.push(node(y.x, dis[y.x]));
}
}
}
}
/*void Dijkstra(int s)
{
int i;
for (i = 0; i <= n; i++) dis[i] = inf;
dis[s] = 0;
//用优先队列优化
priority_queue<node> q;
q.push(node(s, dis[s]));
while (!q.empty())
{
node x = q.top(); q.pop();
for (i = 0; i<eg[x.x].size(); i++)
{
node y = eg[x.x][i];
if (dis[y.x]>x.d + y.d)
{
dis[y.x] = x.d + y.d;
q.push(node(y.x, dis[y.x]));
}
}
}
}*/
int main()
{
int a, b, d;
while (~scanf("%d%d", &n, &m))
{
for (int i = 0; i <= n; i++) eg[i].clear();
while (m--)
{
scanf("%d%d%d", &a, &b, &d);
eg[a].push_back(node(b, d));
eg[b].push_back(node(a, d));
}
int s, e;
scanf("%d%d", &s, &e);
Dijkstra(s);
printf("%d\n", dis[e] == inf ? -1 : dis[e]);
}
return 0;
}
#include<queue>
using namespace std;
/*
Dijkstra的算法思想:
在所有没有访问过的结点中选出dis(s,x)值最小的x
对从x出发的所有边(x,y),更新
dis(s,y)=min(dis(s,y),dis(s,x)+dis(x,y))
*/
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
const int inf = 1 << 27;
struct node{
int x, d;
node(){}
node(int a, int b){ x = a; d = b; }
};
bool operator <(node a, node b)
{
if (a.d == b.d) return a.x<b.x;
else return a.d > b.d;
}
vector<node>eg[1005];
int dis[1005], n,m;
void Dijkstra(int s)
{
for (int i = 0; i <= n; i++)dis[i] = inf;
dis[s] = 0;
priority_queue<node>q;
q.push(node(s, dis[s]));
while (!q.empty())
{
node x = q.top();
q.pop();
for (int i = 0; i < eg[x.x].size(); i++)
{
node y = eg[x.x][i];
if (dis[y.x]>x.d + y.d)
{
dis[y.x] = x.d + y.d;
q.push(node(y.x, dis[y.x]));
}
}
}
}
/*void Dijkstra(int s)
{
int i;
for (i = 0; i <= n; i++) dis[i] = inf;
dis[s] = 0;
//用优先队列优化
priority_queue<node> q;
q.push(node(s, dis[s]));
while (!q.empty())
{
node x = q.top(); q.pop();
for (i = 0; i<eg[x.x].size(); i++)
{
node y = eg[x.x][i];
if (dis[y.x]>x.d + y.d)
{
dis[y.x] = x.d + y.d;
q.push(node(y.x, dis[y.x]));
}
}
}
}*/
int main()
{
int a, b, d;
while (~scanf("%d%d", &n, &m))
{
for (int i = 0; i <= n; i++) eg[i].clear();
while (m--)
{
scanf("%d%d%d", &a, &b, &d);
eg[a].push_back(node(b, d));
eg[b].push_back(node(a, d));
}
int s, e;
scanf("%d%d", &s, &e);
Dijkstra(s);
printf("%d\n", dis[e] == inf ? -1 : dis[e]);
}
return 0;
}
阅读全文
0 0
- hdu 1874 Dijkstra算法
- hdu 1874 Dijkstra算法
- HDU 1874 Dijkstra模板
- hdu 1874 dijkstra算法
- Dijkstra hdu 1874
- HDU-1874-Dijkstra算法
- hdu 1874 dijkstra算法
- Dijkstra HDU 1874
- HDU 1874 dijkstra最短路
- hdu 1874畅通工程续 dijkstra
- hdu 1874 最短路径dijkstra
- HDU-1874(dijkstra求最短路)
- HDU-1874(邻接表写Dijkstra())
- hdu 1874 畅通工程续 (dijkstra算法)
- HDU--1874 -- 畅通工程续 [Dijkstra]
- HDU 1874 畅通工程续(Dijkstra)
- HDU 1874 畅通工程续(简单Dijkstra)
- hdu 1874 畅通工程续 dijkstra算法
- 二维拉普拉斯方程的数值解法
- GMM(高斯混合模型)
- 面向对象的特征
- Hibernate之框架简介以及环境配置说明
- TensorFlow学习日记11
- Dijkstra HDU 1874
- 连接到 Azure 上的 SQL Server 虚拟机(经典部署)
- 【TCP/IP】ubuntu中,wireshark启动提示:Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46
- PHPquery php爬虫
- java开发常用词汇01
- C++后台笔记,,飞哥的分享
- OpenCV4Android中图像预览旋转90度的问题
- RFID原理
- nodejs(express+mysql+jade)的增、删、改、查