主题:[原创]偶写的最短路径 呵呵
#include<stdio.h>
#define INFINITY 1000000
#define MAX 100
#define ElemType long
typedef struct {
long weight[MAX][MAX];
int vexnum;
}MGraph;
int final[MAX]={0};
void Path(MGraph G,int v0,long d[]){
long i,v,w,min;
for(v=0;v<G.vexnum;v++){
final[v]=0;
d[v]=G.weight[v0][v];
}
d[v0]=0;
final[v0]=1;
for(i=1;i<G.vexnum;i++){
min=INFINITY;
for(w=0;w<G.vexnum;w++)
if(!final[w])
if(d[w]<min){min=d[w];v=w;}
final[v]=1;
for(w=0;w<G.vexnum;w++)
if(!final[w]&&min+G.weight[v][w]<d[w])
d[w]=min+G.weight[v][w];
}
}
void Init(long d[],int n){
int i;
for(i=0;i<n;i++)
d[i]=0;
}
int main(){
MGraph G;
long i,j,k,d[MAX];
int n;
while(scanf("%d",&n)!=EOF){
G.vexnum=n;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
scanf("%ld",&G.weight[i][j]);
if(G.weight[i][j]==0) G.weight[i][j]=INFINITY;
}
for(i=0;i<n;i++){
Init(d,n);
Path(G,i,d);
for(j=0;j<n;j++){
if(d[j]>=INFINITY) printf("0");
else printf("%ld",d[j]);
if(j!=n-1) printf(" ");
}
printf("\n");
}
}
return 0;
}
#define INFINITY 1000000
#define MAX 100
#define ElemType long
typedef struct {
long weight[MAX][MAX];
int vexnum;
}MGraph;
int final[MAX]={0};
void Path(MGraph G,int v0,long d[]){
long i,v,w,min;
for(v=0;v<G.vexnum;v++){
final[v]=0;
d[v]=G.weight[v0][v];
}
d[v0]=0;
final[v0]=1;
for(i=1;i<G.vexnum;i++){
min=INFINITY;
for(w=0;w<G.vexnum;w++)
if(!final[w])
if(d[w]<min){min=d[w];v=w;}
final[v]=1;
for(w=0;w<G.vexnum;w++)
if(!final[w]&&min+G.weight[v][w]<d[w])
d[w]=min+G.weight[v][w];
}
}
void Init(long d[],int n){
int i;
for(i=0;i<n;i++)
d[i]=0;
}
int main(){
MGraph G;
long i,j,k,d[MAX];
int n;
while(scanf("%d",&n)!=EOF){
G.vexnum=n;
for(i=0;i<n;i++)
for(j=0;j<n;j++){
scanf("%ld",&G.weight[i][j]);
if(G.weight[i][j]==0) G.weight[i][j]=INFINITY;
}
for(i=0;i<n;i++){
Init(d,n);
Path(G,i,d);
for(j=0;j<n;j++){
if(d[j]>=INFINITY) printf("0");
else printf("%ld",d[j]);
if(j!=n-1) printf(" ");
}
printf("\n");
}
}
return 0;
}