POJ1122

来源:互联网 发布:苹果电脑 知乎 编辑:程序博客网 时间:2024/05/17 01:35
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 999999999


int n,map[30][30],m;
int fire,sa[30];
int path[30][30];
int ans[30];


bool cmp(int a,int b)
{
    return map[sa[a]][fire]<map[sa[b]][fire];
}


void dfs(int i,int j)
{
    if(path[i][j]!=-1)
    {
        dfs(i,path[i][j]);
        printf("\t%d",path[i][j]);
        dfs(path[i][j],j);
    }
}
int main()
{
    int i,j,k;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            scanf("%d",&map[i][j]);
            if(map[i][j]==-1)
                 map[i][j]=INF;
        }
    }
    scanf("%d",&fire);
    m=0;
    int x;
    while(~scanf("%d",&x))
        sa[++m]=x;


    memset(path,-1,sizeof(path));
    for(k=1;k<=n;k++)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(map[i][j] > map[i][k]+map[k][j])
                {
                    map[i][j] = map[i][k]+map[k][j];
                    path[i][j] = k;
                }
            }
        }
    }


    for(i=1;i<=m;i++)
       ans[i]=i;
    printf("Org\tDest\tTime\tPath\n");
    sort(ans+1,ans+1+m,cmp);


    for(i=1;i<=m;i++)
    {
        printf("%d\t%d\t%d\t",sa[ans[i]],fire,map[sa[ans[i]]][fire]);
        if(sa[ans[i]]==fire)
            printf("%d\n",fire);
        else
        {
            printf("%d",sa[ans[i]]);
            dfs(sa[ans[i]],fire);
            printf("\t%d\n",fire);
        }
    }
}
0 0
原创粉丝点击