编辑代码


#include<stdio.h>
  
#define SIZE 110  
#define INF 1000000

int sum=0;
 
void Floyd(int n,int Graph[][SIZE],int path[][SIZE])//求最短路径矩阵path[][]
{ 
    int i,j,k;
    int A[SIZE][SIZE];
    for(i = 0;i < n;i++)
    {
        for(j = 0;j < n;j++)
        {
            A[i][j] = Graph[i][j];
            path[i][j] = -1;
        }
    }
    for(k = 0;k < n;k++)
    {
        for(i=0;i < n;i++)
        {
            for(j=0;j < n;j++)
            {
                if(A[i][j]>A[i][k]+A[k][j])
                 {
                     A[i][j] = A[i][k]+A[k][j];
                     path[i][j] = k;
                 }
            }
        }
    }
}

void shortpath(int start,int end,int path[][SIZE],int Graph[][SIZE])//最短路径值
{
    if(path[start][end] == -1)
    {
        sum = sum+Graph[start][end];
    }

    else
    {
        int mid = path[start][end];
        shortpath(start,mid,path,Graph);
        shortpath(mid,end,path,Graph);
    }
    return sum;
}
int main () 
{  
    int map[SIZE][SIZE];
    int start ;
    int end;
    int vertex;
    int i,j,num,na,n2,n3,n4,n5;
    int k;
    int Ver;
    int edge_num;
    scanf("%d%d",&vertex,&edge_num);             //城市数,边数
    scanf("%d %d %d %d %d",&n1,&n2,&n3,&n4,&n5); //每个城市看电影的价格
    int arr[5];                                  //每个城市看电影的价格
    arr[0]=n1;   
    arr[1]=n2;
    arr[2]=n3;
    arr[3]=n4;
    arr[4]=n5;
    for(i=0;i<=vertex;i++)
    {
        for(j=0;j<=vertex;j++)
        if(i == j)
        {
            map[i][j] = 0;
        }
        else
        {
            map[i][j] = INF;
        }
    }

    for(k=0;k<edge_num;k++)
    {
        scanf("%d %d %d",&i,&j,&num);
        map[i][j]=num+arr[j-1];             //从i到j看电影加上b处的电影票
        map[j][i]=num+arr[i-1];             //从j到i看电影加上b处的电影票
    }
    for(int i=1;i<=vertex;i++)
    {
        map[i][i]=arr[i];                 //城市i处的电影票价格
    }
} 
   int Graph[SIZE][SIZE];
   int path[SIZE][SIZE];
   int num[5];
   int start,end;
   int  m=0;
   for (int i=0;i<vertex;i++)
   {
       for( int j=0;j<vertex;j++)
       {
           strat=i;
           end=j;
           int vertexnum = gen(Graph,start,end);
           Floyd(vertexnum,Graph,path);
           shortpath(start,end,path,Graph);
           num[m]=sum;
           m++;
       }
   }
   for(int i=0;i<5;i++)
   {
       printf("%2d",num[i]);
   }
 
    return 0;  
}