Dijkstra算法模板

Dijkstra算法是图论寻找最短路径中非常常用的算法了,刷题时经常会用到该算法,把该算法贴上方便日后使用

有路径版本:

#include
#include
using namespace std;
const int MAXV=1000;		//最大顶点数
const int INF=1000000000;	//设INF为一个很大的数 
int n,m,s,G[MAXV][MAXV];	//n为顶点数,m为边数,s为起点
int d[MAXV];				//起点到各顶点的最短路径长度
map > mp; 	//存储路径信息 
bool vis[MAXV]={false};		//标记数组,vis[i]==true表示已访问。初值为false
void Dijkstra(int s){		//s为起点 
	fill(d,d+MAXV,INF);		//fill函数将整个d数组赋为INF 
	fill(vis,vis+MAXV,false);
	mp.clear();
	d[s]=0;					//起点s到自身距离为0
	for(int i=0;iv的边权
		G[u][v]=w; 
	} 
	Dijkstra(s);
	for(int i=0;i%d min:%d\n",s,i,d[i]);
		printf("path:");
		for(int j=0;j

无路径版本: 

#include
#include
using namespace std;
const int MAXV=1000;		//最大顶点数
const int INF=1000000000;	//设INF为一个很大的数 
int n,m,s,G[MAXV][MAXV];	//n为顶点数,m为边数,s为起点
int d[MAXV];				//起点到各顶点的最短路径长度
bool vis[MAXV]={false};		//标记数组,vis[i]==true表示已访问。初值为false
void Dijkstra(int s){		//s为起点 
	fill(d,d+MAXV,INF);		//fill函数将整个d数组赋为INF 
	fill(vis,vis+MAXV,false);
	d[s]=0;					//起点s到自身距离为0
	for(int i=0;iv的边权
		G[u][v]=w; 
	} 
	Dijkstra(s);
	for(int i=0;i

 

你可能感兴趣的:(算法刷题,Dijkstra,算法)