当前位置:编程学习 > C/C++ >>

九度教程第79题

C语言源码:
[cpp]  
#include<stdio.h>  
#include<limits.h>  
#define maxsize 610  
int E[maxsize][maxsize];  
int T[maxsize][2];  
int ed[10009][3];  
int main()  
{  
    int n,m,a[maxsize],i,j,fmin,min,sum,p,q;  
    scanf("%d",&n);  
    while(n)  
    {  
        for(i=0;i<n;i++)  
            for(j=0;j<n;j++)  
                E[i][j]=INT_MAX;  
        scanf("%d",&m);  
        i=1;  
        while(i<=m)  
        {  
            scanf("%d %d %d",&ed[i][0],&ed[i][1],&ed[i][2]);  
            i++;  
        }  
        for(i=0;i<n;i++)  
            scanf("%d",&a[i]);  
        i=1;  
        while(i<=m)  
        {  
            p=ed[i][0]-1;  
            q=ed[i][1]-1;  
            if(a[p]==1&&a[q]==2)  
                E[p][q]=ed[i][2];  
            else  
                if(a[p]==2&&a[q]==1)  
                    E[q][p]=ed[i][2];  
                else  
                {  
                    E[p][q]=ed[i][2];  
                    E[q][p]=ed[i][2];  
                }  
                i++;  
        }  
        for(i=0;i<n;i++)  
        {  
            T[i][0]=0;  
            T[i][1]=INT_MAX;  
        }  
        i=0;  
        sum=0;  
        T[0][0]=1;  
        T[0][1]=0;  
        while(i!=1)  
        {  
            for(j=0;j<n;j++)  
            {  
                if(T[j][0]==0&&E[i][j]!=INT_MAX&&sum+E[i][j]<T[j][1])  
                    T[j][1]=sum+E[i][j];  
            }  
            fmin=-1;  
            min=INT_MAX;  
            for(j=0;j<n;j++)  
            {  
                if(T[j][0]==0&&T[j][1]<min)  
                {  
                    fmin=j;  
                    min=T[j][1];  
                }  
            }  
            sum=min;  
            if(fmin==-1)  
                break;  
            else  
                i=fmin;  
            T[i][0]=1;  
        }  
        if(T[1][1]!=INT_MAX)  
            printf("%d\n",T[1][1]);  
        else  
            printf("-1\n");  
        scanf("%d",&n);  
    }  
}  
 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,