|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#define INFINITY 65535
#define MAXVEX 4
typedef int path_parent[MAXVEX][MAXVEX];
typedef int shortpath[MAXVEX][MAXVEX];
typedef struct
{
int numvertexes;
int arc[][MAXVEX];//={0,INFINITY,5,6,INFINITY,INFINITY,0,INFINITY,3,1,
//5,INFINITY,0,INFINITY,4,6,3,INFINITY,0,2,INFINITY,1,4,2,0};
}MGraph;
init(MGraph *G)
{
int i,j;
int k=4;
(*G).numvertexes=MAXVEX;
for(i=0;i<MAXVEX;i++)
{
for(j=0;j<MAXVEX;j++)
{
printf("请输入%d->%d边的权值:",i,j);
scanf("%d",&(*G).arc[i][j]);
printf("\n");
}
}
for(i=0;i<k;i++)
{
printf(" %d",i); //第一列为顶点的信息
for(j=0;j<k;j++)
{
printf(" %d",(*G).arc[i][j]); //顶点和顶点之间的关系
}
printf("\n");
}
}
void shortestpath_floyd(MGraph *G,path_parent *p,shortpath *d)
{
int v,w,k;
//初始化D和P
for(v=0;v<G->numvertexes;v++)
{
for(w=0;w<G->numvertexes;w++)
{
(*d)[v][w]=G->arc[v][w];
(*p)[v][w]=w;
}
}
//优美的弗洛伊德算法
for(k=0;k<G->numvertexes;k++)
{
for(v=0;v<G->numvertexes;v++)
{
for(w=0;w<G->numvertexes;w++)
{
if((*d)[v][w]>(*d)[v][k]+(*d)[k][w])
{
(*d)[v][w]=(*d)[v][k]+(*d)[k][w];
(*p)[v][w]=(*p)[v][k];
}
}
}
}
}
//图的输出结构
void shuchu(MGraph* tu)
{
int i,j,k;
k=tu->numvertexes;
//输出第一行顶点的信息
printf(" 顶点");
for(i=0;i<k;i++)
{
printf(" %d",i);
}
printf("\n");
for(i=0;i<k;i++)
{
printf(" %d",i); //第一列为顶点的信息
for(j=0;j<k;j++)
{
printf(" %d",tu->arc[i][j]); //顶点和顶点之间的关系
}
printf("\n");
}
}
int main()
{
MGraph A;
init(&A);
shuchu(&A);
path_parent b;
shortpath c;
shortestpath_floyd(&A,&b,&c);
shuchu(&A);
return 0;
}
然而我把int arc[][MAXVEX]; 修改为 arc[MAXVEX][MAXVEX]; 就哦了 -_-
为什么要定义不定长数组?是不是看不起我?
|
|