帮忙看一下递归中那里错了(解决即给分)
#include "stdio.h"
#define MAX 20
typedef struct
{
int data[MAX][MAX];
int dem;
int edge;
}sqgraph;
struct
{
int pre[MAX];
int next[MAX];
}Dot[MAX];
int Ee[MAX],El[MAX];
int Earliest[MAX][MAX],Latest[MAX][MAX];
sqgraph CreateGraph(sqgraph g)
{
int n,edge,i,j,beg,end,weight;
printf("Input the total dots and edges:");
scanf("%d%d",&n,&edge);
g.edge=edge;
g.dem=n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g.data[i][j]=0;
printf("Input the begin dot,end dot and the weight of the edge:\n");
for(i=1;i<=edge;i++)
{
scanf("%d%d%d",&beg,&end,&weight);
g.data[beg][end]=weight;
}
return(g);
}
void GetDotInfo(sqgraph g)
{
int n,i,j;
for(i=1;i<=g.dem;i++)
{
n=1;
for(j=1;j<=g.dem;j++)
{
if(g.data[i][j]!=0)
{
Dot[i].next[n]=j;
n++;
}
}
Dot[i].next[0]=n-1;
}
for(j=1;j<=g.dem;j++)
{
n=1;
for(i=1;i<=g.dem;i++)
{
if(g.data[i][j]!=0)
{
Dot[j].pre[n]=i;
n++;
}
}
Dot[j].pre[0]=n-1;
}
}
void Init(sqgraph g)
{
int i,j;
for(i=0;i<=g.dem;i++)
{
Ee[i]=0;
El[i]=32767;
}
for(i=1;i<=g.dem;i++)
for(j=1;j<=g.dem;j++)
{
Earliest[i][j]=32767;
Latest[i][j]=32767;
}
}
int GetEarliest(sqgraph g,int now)//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!帮忙看一下递归中那里错了(从汇点开始递归)?
{
int k,m_pre;
for(k=1;k<=Dot[now].pre[0];k++)
{
m_pre=Dot[now].pre[k];
if(Ee[m_pre]==0&&m_pre!=1)
{
Ee[m_pre]=GetEarliest(g,m_pre);
}
else
{
if(Ee[m_pre]+g.data[m_pre][now]>Ee[now])
{
Ee[now]=Ee[m_pre]+g.data[m_pre][now];
}
}
}
return Ee[now];
}
int GetLatest(sqgraph g,int now)//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!帮忙看一下递归中那里错了(从源点开始递归)?
{
int k,m_next;
for(k=1;k<=Dot[now].next[0];k++)
{
m_next=Dot[now].next[k];
if(El[m_next]==32767)
El[m_next]=GetLatest(g,m_next);
else
if(El[m_next]-g.data[now][m_next]<El[now])
{
El[now]=El[m_next]-g.data[now][m_next];
}
}
return El[now];
}
void OutputEl(sqgraph g)
{
int i;
for(i=1;i<=g.dem;i++)
{
printf("El[%d]:%d ",i,El[i]);
}
}
void OutputEe(sqgraph g)
{
int i;
for(i=1;i<=g.dem;i++)
{
printf("Ee[%d]:%d ",i,Ee[i]);
}
}
void main()
{
sqgraph g;
g=CreateGraph(g);
GetDotInfo(g);
Init(g);
Ee[g.dem]=GetEarliest(g,g.dem);
OutputEe(g);
El[g.dem]=Ee[g.dem];
El[1]=GetLatest(g,1);
OutputEl(g);
}