回 帖 发 新 帖 刷新版面

主题:[讨论]各位高手,帮帮忙改下程序


#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef char DataType;
#define MaxSize 100
#define MaxVertices 10
#define MaxWeight 10000


void Dijkstra(AdjMGraph G,int v0,int distance[],int path[] )
{
int n=G.Vertices.size;
int*s=(int *)malloc(sizeof(int)*n);
int minDis,i,j,u;
for (i=0;i<n;i++)
{
distance[i]=G.edge[v0][i];
s[i]=0;
if (i!=v0&&distance[i]<MaxWeight)path[i]=v0;
else path[i]=-1;
}
s[v0]=1;
for (i=1;i<n;i++)
{
minDis=MaxWeight;
for(j=0;j<n;j++)
if(s[j]==0&&distance[j]<minDis)
{u=j;
minDis=distance[j];
}
if(minDis==MaxWeight)return;
s[u]=1;
for(j=0;j<n;j++)
if(s[j]==0&&G.edge[u][j]<MaxWeight&&distance[u]+G.edge[u][j]<distance[j])
{
distance[j]=distance[u]+G.edge[u][j];
path[j]=u;
}}}
void main(void)
{
AdjMGraph g;
char a[]={'A','B','C','D','E','F'};
RowColWeight rew[]={{0,2,5},{ 0,3,30},{1,0,2},{1,4,8},{2,1,15},{2,5,7},
{5,3,10},{5,4,18}};
int i,n=6,e=9;
int distance[6],path[6];
CreatGraph(&g,a,n,rew,e);
Dijkstra(g,0,distance,path);
printf("从结点%c 到其它各结点的最短距离为\n",g.Vertices.list[0]);
for (i=0;i<n;i++)
printf("到结点%c的最短距离为%d\n",g.Vertices.list[i],distance[i]);
printf("从结点%c到其它各结点最短路径的前一结点为:\n",g.Vertices.list[0]);
for(i=0;i<n;i++ )
if(path[i]!=-1)
printf("到结点%c的前一结点为%c;\n",g.Vertices.list[i].g.Vertices.list[path[i]]);
}
有一个错误,但改不出来。

回复列表 (共1个回复)

沙发


如果没看错,这个是图的运算的,但是图的结构体没有定义

具体怎么定义你自己应该知道吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册