341 - Non-Stop Travel

#include<bits/stdc++.h>
#define Infinity 100000
using namespace std;
int mat[15][15],koyta_node,Path[15][15];

void Floyd()
{
    for(int k=1; k<=koyta_node; k++)
    {
        for(int i=1; i<=koyta_node; i++)
        {
            for(int j=1; j<=koyta_node; j++)
            {
                if(mat[i][j]>mat[i][k]+mat[k][j])
                {
                    mat[i][j]=mat[i][k]+mat[k][j];
                    Path[i][j]=Path[k][j];
                }
            }
        }
    }
}

void Print_Path(int s,int e)
{
    if(Path[s][e]==s)
    {
        printf(" %d",Path[s][e]);
        return;
    }
    else
    {
        Print_Path(s,Path[s][e]);
        printf(" %d",Path[s][e]);
    }
    return;
}

int main()
{
    int to,i,j,x,delay,koyta_route,start,nd,test=0;
    while(scanf("%d",&koyta_node)&&koyta_node)
    {
        for(i=1; i<=koyta_node; i++)
        {
            for(j=1; j<=koyta_node; j++)
            {
                if(i!=j)
                    mat[i][j]=Infinity;
            }
        }

        for(i=1; i<=koyta_node; i++)
        {
            for(j=1; j<=koyta_node; j++)
            {
                Path[i][j]=i;
            }
        }

        for(x=1; x<=koyta_node; x++)
        {
            scanf("%d",&koyta_route);
            while(koyta_route--)
            {
                scanf("%d%d",&to,&delay);
                mat[x][to]=delay;
            }
        }

        Floyd();

        scanf("%d%d",&start,&nd);

        printf("Case %d: Path =",++test);

        Print_Path(start,nd);

        printf(" %d;",nd);

        printf(" %d second delay\n",mat[start][nd]);


    }

    return 0;
}

0 comments: (+add yours?)