Codeup最短路径:问题 D: 最短路径

题目描述

有n个城市m条道路(n<1000, m<10000),每条道路有个长度,请找到从起点s到终点t的最短距离和经过的城市名。

输入

输入包含多组测试数据。

每组第一行输入四个数,分别为n,m,s,t。

接下来m行,每行三个数,分别为两个城市名和距离。

输出

每组输出占两行。

第一行输出起点到终点的最短距离。

第二行输出

最短路径上经过的城市名,如果有多条最短路径,输出字典序最小的那条。若不存在从起点到终点的路径,则输出“can't arrive”。

样例输入

3 3 1 3
1 3 3
1 2 1
2 3 1

样例输出

2
1 2 3

#include
using namespace std;
const int maxn=1010;
const int INF=0x3fffffff;
bool vis[maxn];
int n,d[maxn],G[maxn][maxn],pre[maxn];
struct node
{
	int v,w;
	node(int x,int y):v(x),w(y){ };
};
vector adj[maxn];
void Dijkstra(int s)
{
	fill(d,d+maxn,INF);
	fill(vis,vis+maxn,false);
	for(int i=1;i<=n;++i)
		pre[i]=i;
	d[s]=0;
	for(int i=1;i<=n;++i)
	{
		int min=INF,u=-1;
		for(int j=1;j<=n;++j)
		{
			if(d[j]

 

你可能感兴趣的:(ACM)