hdu 1874 dijsktra(mlogn) +bellmanford
来源:互联网 发布:智慧树网络课程好过吗? 编辑:程序博客网 时间:2024/06/18 11:33
dijsktra(mlogn)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int N,M,S,T;
struct Edge
{
int u,v,w;
};
struct Node
{
int w,u;
Node(int _w,int _u):w(_w),u(_u){}
bool operator <(constNode &other)const
{
return w>other.w;
}
};
Edge edges[1005];
vector<int> G[205];
priority_queue<Node> PQ;
bool vis[205];
#define INF 0X7FFFFFFF
int d[205];
int main()
{
while (scanf("%d %d",&N,&M)!=EOF)
{
for (int i=0; i<205; i++)
G[i].clear();
while (!PQ.empty())
PQ.pop();
memset(vis,false,sizeof(vis));
for (int i=0; i<M; i++)
{
scanf("%d %d %d",&edges[i].u,&edges[i].v,&edges[i].w);
//添加以u邻接的边序号
G[edges[i].u].push_back(i);
G[edges[i].v].push_back(i);
}
//dijkstra nlogn
int ans=-1;
scanf("%d %d",&S,&T);
for (int i=0; i<N; i++)
d[i]=INF;
d[S]=0;
PQ.push(Node(0,S));
while (!PQ.empty())
{
Node topNode=PQ.top();
PQ.pop();
//结点序号
int u=topNode.u;
if (vis[u])
continue;
vis[u]=true;
if (u==T)
{
ans=topNode.w;
break;
}
for (int i=0; i<G[u].size(); i++)
{
//对与u邻接的边作松弛操作
Edge &e=edges[G[u][i]];
//确定当前边的起点和终点
int from=e.u==u?u:e.v;
int to=e.u==u?e.v:e.u;
if (d[to]>d[from]+e.w)
{
d[to]=d[from]+e.w;
PQ.push(Node(d[to],to));
}
}
}
printf("%d\n",ans);
}
}
bellmanford
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
int N,M,S,T;
struct Edge
{
int u,v,w;
};
Edge edges[1005];
vector<int> G[205];
queue<int> Q;
bool inq[205];
#define INF 0X7FFFFFFF
int d[205];
int main()
{
while (scanf("%d %d",&N,&M)!=EOF)
{
for (int i=0; i<205; i++)
G[i].clear();
memset(inq,false, sizeof(inq));
for (int i=0; i<M; i++)
{
scanf("%d %d %d",&edges[i].u,&edges[i].v,&edges[i].w);
//添加以u邻接的边序号
G[edges[i].u].push_back(i);
G[edges[i].v].push_back(i);
}
//dijkstra nlogn
int ans=-1;
scanf("%d %d",&S,&T);
for (int i=0; i<N; i++)
d[i]=INF;
d[S]=0;
Q.push(S);
while (!Q.empty())
{
int u=Q.front();
Q.pop();
inq[u]=false;
for (int i=0; i<G[u].size(); i++)
{
//对与u邻接的边作松弛操作
Edge &e=edges[G[u][i]];
//确定当前边的起点和终点
int from=e.u==u?u:e.v;
int to=e.u==u?e.v:e.u;
if (d[to]>d[from]+e.w)
{
d[to]=d[from]+e.w;
Q.push(to);
inq[to]=true;
}
}
}
if (d[T]!=INF)
printf("%d\n",d[T]);
else
printf("-1\n");
}
}
- hdu 1874 dijsktra(mlogn) +bellmanford
- HDU 1874畅通工程续&HDU 2544 最短路(Dijsktra)
- (Dijstra + 优先队列,Floyd,BellmanFord,SPFA)HDU-1874
- hdu 2962 Trucking 二分 + Dijsktra
- hdu 1317 XYZZY【BellmanFord+Floyd】
- HDU—2122HDU Today(Dijsktra)
- Bellmanford
- BellmanFord
- HDU 1869:六度分离【Dijsktra & SPFA & Floyd】
- hdu 1874 畅通工程续 dijsktra dijkstra+邻接表 优先队列 bellman-ford bellman-ford队列优化(基础题目,一步步优化)
- HDU 2112.HDU Today【最短路径(Dijsktra算法+字符串)】【4月17】
- Hud 1874 畅通工程续[基础最短路(Dijsktra)]
- HDOJ 1874 畅通工程续(最短路 - dijsktra算法)
- DIJSKTRA优化
- poj3268 dijsktra
- dijsktra模板
- dijsktra算法
- Dijsktra模板
- LeetCode-Subsets
- Python replace()方法
- UNP卷1:第十四章(高级I/O函数)
- LaTeX完整例子_参考文献、图、表和公式
- 求哈弗曼编码
- hdu 1874 dijsktra(mlogn) +bellmanford
- nginx send back content post by client
- 设置字体相关命令
- <图形图像,动画,多媒体> 读书笔记 --- 音效
- [HDU 4776 Ants] Trie异或+预处理
- 寻找阿里巴巴:杨致远完成硅谷史上最赚钱赌博
- 【无限互联】SDWebImage图片缓存流程分析
- c++命令提示符窗口下打印指定大小的菱形代码
- 找到IAR 6.2/6.3编译以前项目的出一大堆错误的原因了