记录编号 206240 评测结果 AAAAAAAA
题目名称 旅行计划 最终得分 100
用户昵称 GravatarNVIDIA 是否通过 通过
代码语言 C++ 运行时间 0.011 s
提交时间 2015-11-06 12:04:40 内存使用 0.41 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define inf 999999999
int i,j,k,n,m,v,a1,b1,c1,temp,path,cost,b[10010],pr[10010],up[10010],a[100][100];
void DO(int v1) 
{
    int temp;
    temp=up[v1];
    if(temp!=0)
	DO(temp);
    if(v1!=v)
	printf("%d ",v1);
}
int main() 
{
    freopen("djs.in","r",stdin);
    freopen("djs.out","w",stdout);
    scanf("%d%d%d",&n,&m,&v);
    for(i=0;i<=n;i++)
        for(j=0;j<=n;j++)
		if(i==j)a[i][j]=0;
			else a[i][j]=inf;
   
    for(i=1;i<=m;i++) 
	{
        scanf("%d%d%d",&a1,&b1,&c1);
        a[a1][b1]=c1;//有向图
        pr[i]=up[i]=0;//标记初始
        b[i]=inf;
    }
    pr[0]=0;
    b[0]=inf;
    b[v]=up[0]=0;
    for(k=0;k<n;k++) 
	{
        temp=inf;
        for(i=0;i<n;i++)
            if(pr[i]==0&&b[i]< temp)
                temp=b[j=i];
        pr[j]= 1;
        for(i=0; i<n; i++)
            if(a[j][i]!=inf)
                if(a[j][i]+b[j]< b[i]) 
				{
                    b[i]=a[j][i]+b[j];
                    up[i]=j;
                }
    }
    for(i=0;i<n;i++) 
	{
        printf("%d:\n",i);
        if(i==v||b[i]==inf)
            printf("no\n");
        else 
		{
            printf("path:%d ",v);
            DO(up[i]);
            printf("%d\n",i);
            printf("cost:%d\n",b[i]);
        }
    }
    return 0;
}