FLOYD

View Code
  1 #include<stdio.h>
  2 #define MAXV 100
  3 #define INF 32767
  4 //#include"graph.h"
  5 
  6 void DispMat(MGraph g)
  7 {
  8     int i,j;
  9     for(i=0;i<g.n;i++)
 10     {
 11         for(j=0;j<g.n;j++)
 12         if(g.edges[i][j]==INF)
 13         printf("%3s","");
 14         else
 15         printf("%3d",g.edges[i][j]);
 16         printf("\n");
 17     }
 18 }
 19 void ppath(int path[][MAXV],int i,int j)
 20 {
 21     int k;
 22     k=path[i][j];
 23     if(k==-1) return;
 24     ppath(path,i,k);
 25     printf("%d,",k);ppath(path,k,j);
 26 }
 27 void DisPath(int A[][MAXV],int path[][MAXV],int n)
 28 {
 29     int i,j;
 30     for(i=0;i<n;i++)
 31     for(j=0;j<n;j++)
 32     if(A[i][j]==INF)
 33     {
 34         if(i!=j)
 35         printf("从%d到%d没有路径");
 36     }
 37     else
 38     {
 39         if(i<j)
 40         {
 41             printf("从%d到%d的路径为:",i,j);
 42             printf("%d,",i);
 43             ppath(path,i,j);
 44             printf("%d",j);
 45             printf("\t路径长度为:%d\n",A[i][j]);
 46         }
 47     }
 48 }
 49 void Floyd(MGraph g)
 50 {
 51     int A[MAXV][MAXV];
 52     int path[MAXV][MAXV];
 53     int i,j,k,n=g.n;
 54     for(i=0;i<n;i++)
 55     for(j=0;j<n;j++)
 56     {
 57         A[i][j]=g.edges[i][j];
 58         path[i][j]=-1;
 59     }
 60     for(k=0;k<n;k++)
 61     {
 62         for(i=0;i<n;i++)
 63         for(j=0;j<n;j++)
 64         if(A[i][j]>(A[i][k]+A[k][j]))
 65         {
 66             A[i][j]=A[i][k]+A[k][j];
 67             path[i][j]=k;
 68         }
 69     }
 70     printf("\n输出最短路径:\n");
 71     DisPath(A,path,n);
 72 }
 73 void main()
 74 {
 75     int i,j,u=0;
 76     MGraph g;
 77     double A[51][51];
 78     for(i=0;i<51;i++)
 79     {
 80         for(j=0;j<51;j++)
 81         {
 82             A[i][j]=INF;
 83         }
 84     }
 85     A[0][18]=2182.0;
 86     A[0][21]=1796.9;
 87     A[0][26]=1392.1;
 88     A[1][3]=1916.3;
 89     A[1][6]=1294.3;
 90     A[1][7]=1968.2;
 91     A[1][8]=2.8638e+003;
 92     A[2][4]=2.2926e+003;
 93     A[2][5]=1.2529e+003;
 94     A[2][20]=7.8233e+003;
 95     A[3][4]=3.5364e+003;
 96     A[3][8]=1.9581e+003;
 97     A[5][15]=5.0045e+003;
 98     A[7][10]=2.0594e+003;
 99     A[7][18]=5.9179e+003;
100     A[8][12]=1.7568e+003;
101     A[9][10]=1.9455e+003;
102     A[9][14]=2.6813e+003;
103     A[10][18]=5.9095e+003;
104     A[11][12]=1.4177e+003;
105     A[11][13]=1.6696e+003;
106     A[12][13]=1.4568e+003;
107     A[12][15]=4.8058e+003;
108     A[12][25]=5.7566e+003;
109     A[13][18]=3.1135e+003;
110     A[13][19]=3.4557e+003;
111     A[14][16]=2.6077e+003;
112     A[14][17]=2.1957e+003;
113     A[14][18]=5.3422e+003;
114     A[14][21]=3.2967e+003;
115     A[15][22]=2.8610e+003;
116     A[15][25]=4.2354e+003;
117     A[16][23]=2.0976e+003;
118     A[17][21]=1.8239e+003;
119     A[17][23]=1.7745e+003;
120     A[18][31]=2.1037e+003;
121     A[19][24]=2.2586e+003;
122     A[19][25]=1.9662e+003;
123     A[20][22]=1.4989e+003;
124     A[21][26]=2.1917e+003;
125     A[21][36]=2.8802e+003;
126     A[22][29]=1.0979e+003;
127     A[22][30]=1.2875e+003;
128     A[23][32]=1.3119e+003;
129     A[24][31]=1.7801e+003;
130     A[25][29]=1.8859e+003;
131     A[25][41]=4.1546e+003;
132     A[26][31]=1.5370e+003;
133     A[27][31]=1.0678e+003;
134     A[27][36]=2.2039e+003;
135     A[27][39]=1.7799e+003;
136     A[28][30]=1.0179e+003;
137     A[28][33]=1.3257e+003;
138     A[30][41]=4.9976e+003;
139     A[31][34]=2.3247e+003;
140     A[32][35]=1.1140e+003;
141     A[33][46]=3.7585e+003;
142     A[34][40]=1.6308e+003;
143     A[35][38]=1.4097e+003;
144     A[36][38]=1.5374e+003;
145     A[36][45]=3.1825e+003;
146     A[37][40]=2.0901e+003;
147     A[37][41]=2.6019e+003;
148     A[38][43]=2.6184e+003;
149     A[40][45]=3.2170e+003;
150     A[40][47]=2.3312e+003;
151     A[40][50]=3.0435e+003;
152     A[41][44]=2.3660e+003;
153     A[41][46]=2.7354e+003;
154     A[42][43]=917.6737;
155     A[42][45]=2.3517e+003;
156     A[42][49]=1.9714e+003;
157     A[44][48]=2.1525e+003;
158     A[44][50]=4.9870e+003;
159     A[45][50]=3.1028e+003;
160     A[46][48]=1.4941e+003;
161     A[49][50]=3.5688e+003;
162     for(i=0;i<51;i++)
163     {
164         for(j=0;j<51;j++)
165         {
166             if(A[i][j]!=0)
167             A[j][i]=A[i][j];
168         }
169     }
170     g.n=51;
171     g.e=154;
172     for(i=0;i<g.n;i++)
173     for(j=0;j<g.n;j++)
174     g.edges[i][j]=A[i][j];
175     printf("\n");
176     printf("图G的邻接矩阵:\n");
177     DispMat(g);
178     Floyd(g);
179     printf("\n");
180 }
posted @ 2012-08-07 15:48  某某。  阅读(217)  评论(0编辑  收藏  举报