记录编号 128484 评测结果 AAAAAAAA
题目名称 旅行计划 最终得分 100
用户昵称 Gravatar 是否通过 通过
代码语言 C++ 运行时间 0.010 s
提交时间 2014-10-17 19:38:05 内存使用 0.37 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
int n,m,v;
int a[101][101];
long long dis[1001];
bool flag[1001];
int pre[1001];
void spfa(int x)
{
	memset(dis,0x7f,sizeof(dis));
	memset(flag,0,sizeof(flag));
	flag[x]=1;
	queue<int >q;
	dis[x]=0;
	q.push(x);
	int k;
	while(!q.empty())
	{
		k=q.front();
		for(int i=0;i<n;i++)
		{
			if(dis[i]>dis[k]+a[k][i])
			{
				pre[i]=k;
				dis[i]=dis[k]+a[k][i];
				if(!flag[i])
				{
					q.push(i);
					flag[i]=1;
				}
			}
		}
		flag[k]=0;
		q.pop();
	}
} 
int main()
{
	freopen("djs.in","r",stdin);
	freopen("djs.out","w",stdout);
	//cout<<pre[101]<<endl;
	memset(pre,-1,sizeof(pre));
	cin>>n>>m;
	cin>>v;
	int x,y,z;
	int f[1000];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		 a[i][j]=0x7fffffff/3;
		a[i][i]=0;
		f[i]=0;
	}
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y>>z;
		a[x][y]=z;
	}
	spfa(v);
	for(int i=0;i<n;i++)
	{
		cout<<i<<":"<<endl;
		if(i==v||dis[i]==0x7fffffff/3)cout<<"no"<<endl;
		else 
		{
			int c=0;
			cout<<"path:";
			int j=pre[i];
			while(j!=-1)
			{
				//cout<<j<<endl;
				f[++c]=j;
				j=pre[j];
			}
			for(int j=c;j>=1;j--)
			{
				
				cout<<f[j]<<' ';
				if(j==1){cout<<i;
					cout<<endl;
				}
			}
			cout<<"cost:"<<dis[i]<<endl;;
		}
		
	}
}