PAT甲级Dijkstra总结

目前PAT甲级中涉及Dijkstra的题目有如下几题:

                                          1003 Emergency (25)
                                1018 Public Bike Management (30)
                                          1030 Travel Plan (30)
                                 1087 All Roads Lead to Rome (30)
                                           1111 Online Map (30)

1.题目只涉及求出两点之间的最短距离,不需要再根据其余特征筛选最短距离,也就是最原始的Dijkstra:

(1)利用邻接矩阵存储:

//此函数中n为顶点数
void Dijkstra(int s){//s为起点
	fill(d,d+n,inf); //fill将整个d数组赋值为inf
	memset(vis,0,sizeof(vis));
	d[s]=0;//将起点设置为可达
	for(int i=0;i

 (2)利用邻接表存储

//此函数中n为顶点数
void Dijkstra(int s){//s为起点
	fill(d,d+n,inf); //fill将整个d数组赋值为inf
	memset(vis,0,sizeof(vis));
	d[s]=0;//将起点设置为可达
	for(int i=0;i

2.题目需要输出最短路径:

我们需要增加一个path数组来存储路径即可:

//此函数中n为顶点数
void Dijkstra(int s){//s为起点
	//初始化路径
	for(int i=0;i

3.题目要求如果最短路径条数不唯一,根据第二指标确定路径,以及如何用DFS进行第二指标的筛选:

void Dijkstra(int s){
	fill(d,d+maxn,inf);
	fill(vis,vis+maxn,false);
	dis[s]=0;
	for(int i=0;i

4.题目要求输出最短路径条数:

void Dijkstra(int s){
	fill(d,d+maxn,inf);
	fill(vis,vis+maxn,false);
	dis[s]=0;
	num[s]=1;//num数组保存起点到其余点路径最短路的条数,初始化起点到其余可达点都有一条路
	for(int i=0;i

 

你可能感兴趣的:(PAT)