PTA A1030 Travel Plan (Dijkstra求单源最短路+边权花费+打印路径)

法1:Dijkstra+pre数组+c数组

#include
#include
#include
using namespace std;
const int MAXV=510;
const int INF=0x3f3f3f3f;
int G[MAXV][MAXV];
bool vis[MAXV];
int cost[MAXV][MAXV];
int d[MAXV],c[MAXV],pre[MAXV];
int n,m,st,ed;
void Dijkstra(int s){
	memset(d,INF,sizeof(d));
	memset(c,INF,sizeof(c));
	d[s]=0;
	c[s]=0;//
	for(int i=0;i

法2:Dijkstra + DFS + vector path, tempPath, pre[MAXV] + minCost

#include
using namespace std;
const int MAXV=510;
const int INF=0x3f3f3f3f;
int G[MAXV][MAXV];
bool vis[MAXV];
int cost[MAXV][MAXV];
int d[MAXV];
int minCost=INF; 
int n,m,st,ed;
vectorpre[MAXV];
vectorpath,tempPath;

void Dijkstra(int s){
	memset(d,INF,sizeof(d));
	d[s]=0;
	for(int i=0;i0;--i){
			int id=tempPath[i],idNext=tempPath[i-1];
			tempCost+=cost[id][idNext];
		}
		if(tempCost=0;--i) printf("%d ",path[i]);
	printf("%d %d\n",d[ed],minCost);
	return 0;
}

 

你可能感兴趣的:(PTA,算法笔记)