#include <stdio.h> #define MaxDistance 0x7fffffff//设定MaxDistance为无穷大 #define NumOfVertex 300 void Floyd(int Graph[][NumOfVertex],int Vertex); int main() { int Graph[NumOfVertex][NumOfVertex]; int begin,end,weight;//边起点,终点,权值 int Vertex,Arc;//顶点数,边数 register int i,j; while (scanf("%d%d",&Vertex,&Arc)!=EOF) { /************************************************************************/ /* 设定任意两点不可到达 */ /************************************************************************/ for (i=0;i<Vertex;i++) for(j=0;j<Vertex;j++) if(i == j) Graph[i][j] = 0; else Graph[i][j] = MaxDistance; /************************************************************************/ /* 写入权值信息 */ /************************************************************************/ for (i=0;i<Arc;i++) { scanf("%d%d%d",&begin,&end,&weight); Graph[begin][end] = weight; Graph[end][begin] = weight; } Floyd(Graph,Vertex); } return 0; } void Floyd(int Graph[][NumOfVertex],int Vertex) { register i,j,k; for(k=0;k<Vertex;k++)//过度点下标 for(i=0;i<Vertex;i++) for(j=0;j<Vertex;j++) { if (Graph[i][j]>Graph[i][k]+Graph[k][j])//判断是否要更新权值 { Graph[i][j] = Graph[i][k]+Graph[k][j]; } } }