博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dijkstra学习之--基础题
阅读量:2227 次
发布时间:2019-05-09

本文共 2065 字,大约阅读时间需要 6 分钟。

今天做了两道dijkstra算法的基础题;题目都没有什么难度,基本上就是直接套dijkstra算法的代码就行了。

但还是有一些注意的事项,也是今天犯过错的地方:

1是用基本版dijkstra解题的时候要记得给邻接矩阵初始化;

2.是用队列优化的dijkstra的时候记得数组大下必须取顶点数和边数中的大值;

3是用注意题目中给的图是有向图还是无向图,并注意邻接表标示图时无向图的输入及相应算法中边数多少的改变;

4题目中可能会给出重边的情况,这种情况对用基于邻接表的算法没有影响,但对于基于邻接矩阵的算法就要在输入的时候就要注意判断

对于一条边多次输入的情况我们取其最小的权值。

两道题的代码如下:

poj 2387

#include
#include
#include
using namespace std; #define INF 1<<30#define Max 2010 int map[Max][Max],n,m;int visited[Max],d[Max];void Init(){ for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) map[i][j]=INF; map[i][i]=0; }}void dijkstra(int s){ int i,j,k; memset(visited,0,sizeof(visited)); for(i=1;i<=n;i++) d[i]=map[s][i]; visited[s]=1; for(i=0;i
d[mini]+map[mini][j]) d[j]=d[mini]+map[mini][j]; }}int main(){ int i,j,k; while(cin>>m>>n) //注意题目先输入的是边数。。。。。。 { Init(); for(i=0;i
>a>>b>>c; if(map[a][b]>c) //这种题目一般都有重边的陷阱 { map[a][b]=c; map[b][a]=c; } } dijkstra(n); cout<
<

hdu 1874

#include
#include
#include
#include
#include
using namespace std;#define INF 10000000#define Max 1010int u[Max],v[Max],w[Max],visited[Max];int first[Max],next[Max],d[Max],n,m,e;typedef pair
pii;priority_queue
,greater
>q;void dijkstra(int s){ int i,j,k; memset(visited,0,sizeof(visited)); for(i=0;i
d[q.top().second]) q.pop(); if(q.empty()) break;*/ pii u1=q.top(); q.pop(); int x=u1.second; if(visited[x]) continue; visited[x]=1; for(int e=first[x];e!=-1;e=next[e]) if(d[v[e]]>d[x]+w[e]) { d[v[e]]=d[x]+w[e]; q.push(make_pair(d[v[e]],v[e])); } }}void add_e(int a,int b,int c){ u[e]=a;v[e]=b; next[e]=first[a]; w[e]=c; first[a]=e++;}int main(){ int i,j,k1,k2,w; while(cin>>n>>m) { memset(first,-1,sizeof(first)); e=0; for(int k=0;k
>k1>>k2>>w; add_e(k1,k2,w); add_e(k2,k1,w); } cin>>k1>>k2; dijkstra(k1); if(d[k2]>=INF) cout<<"-1"<

转载地址:http://hhefb.baihongyu.com/

你可能感兴趣的文章
【C】堆区和栈区的区别
查看>>
【linux】send和recv函数解析
查看>>
【Linux】线程安全的单例模式以及计算密集型线程和IO密集型线程
查看>>
一次完整的HTTP请求是怎样的??
查看>>
【C++】常见的内存泄漏及解决方法
查看>>
【C++】const 指针与指向const的指针
查看>>
【Linux】多线程和多进程 及其应用场景
查看>>
【C++】构造函数中必须通过初始化列表来进行初始化情况
查看>>
【算法】对于大数的操作
查看>>
【操作系统】系统调用的概念
查看>>
【计算机网络】cookie和session的区别
查看>>
【C++】构造函数、析构函数抛出异常的问题
查看>>
【C++】关于vector<bool>
查看>>
【操作系统】内存碎片产生原因及终极解决办法
查看>>
幂等性验证思想
查看>>
DB理论--数据存储方式
查看>>
PB协议的说明与使用
查看>>
什么是TPS,什么是QPS,区别是什么?
查看>>
git pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
查看>>
arraylist扩容时机java8
查看>>