正文

stu(1185)2005-08-30 20:19:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/4275.html

分享到:

# include<iostream.h> int vexNum,arcNum; long weight[100]; int arcs[100][100]; int dis[100][100];//dis[v][w]表示v到w的最少权值 long result[100][100]; int k; long sum; #define maxValue 32767 void init() {     int i,j;     for(i=0;i<vexNum;i++)         cin>>weight[i];     for(i=0;i<100;i++)         for(j=0;j<100;j++){             if(i==j)                 arcs[i][j]=0;             else                 arcs[i][j]=maxValue;         }     int v1,v2,w;     for(i=0;i<arcNum;i++)     {         cin>>v1>>v2>>w;         arcs[v1-1][v2-1]=w;         arcs[v2-1][v1-1]=w;     } } void shortestPath_floyd()//求每个点间的最短路径 {     int i;     for(i=0;i<vexNum;i++)         for(int j=0;j<vexNum;j++)              dis[i][j]=arcs[i][j];     for(int k=0;k<vexNum;k++)//循环嵌套顺序不能调换,这样才相当于BFS     {         for(i=0;i<vexNum;i++)         {             for(int j=0;j<vexNum;j++)             {                 if(dis[i][j]>dis[i][k]+dis[k][j])                 {                     dis[i][j]=dis[i][k]+dis[k][j];                     //如果i,j中间有di那么必须是i,k中有di或者k,j中有di                 }             }         }     } } void min() {     int i,j;     k=0;     long sum1=0;     for(j=0;j<vexNum;j++)     {         result[0][j]=dis[0][j]*weight[j];         sum1+=result[0][j];     }     sum=sum1;     for(i=0;i<vexNum;i++)     {        sum1=0;        for(j=0;j<vexNum;j++)        {            result[i][j]=dis[i][j]*weight[j];            sum1+=result[i][j];        }        if(sum1<sum)         {             sum=sum1;             k=i;        }     } }          int main() {     while(cin>>vexNum>>arcNum)     {     init();     shortestPath_floyd();     min();     cout<<k+1<<" "<<sum<<endl;     }     return 0; }

阅读(2230) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册