帮忙看一下递归中那里错了(解决即给分)

zachary7833 2003-11-19 08:18:44
#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);
}
...全文
40 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zachary7833 2003-12-03
  • 打赏
  • 举报
回复
题目:
AOE网的问题!
(求关键路径,用矩阵拓扑排序)
ywqzxj 2003-12-01
  • 打赏
  • 举报
回复
递归问题,要着重搞清楚返回条件!?
zhuowei 2003-11-30
  • 打赏
  • 举报
回复
兄弟 把题目弄出来~ 要不大家看的一头雾水~
recover 2003-11-27
  • 打赏
  • 举报
回复
题目是什么,我帮你重写吧,你怎么写么长,,,可怕.
98440622 2003-11-25
  • 打赏
  • 举报
回复
今天没时间看,以后再说吧
98440622 2003-11-25
  • 打赏
  • 举报
回复
今天没时间看,以后再说吧
zhengwei1984222 2003-11-21
  • 打赏
  • 举报
回复
这么长,吓屎我了
weasea 2003-11-21
  • 打赏
  • 举报
回复
先做点别的事,下午看看!
qufan 2003-11-21
  • 打赏
  • 举报
回复
周末再看了
zhouqingyuan 2003-11-19
  • 打赏
  • 举报
回复
明天帮你看看!
brxren 2003-11-19
  • 打赏
  • 举报
回复
我在看!等等吧!
zachary7833 2003-11-19
  • 打赏
  • 举报
回复
怎么没人回答?
是AOE网的问题!
我自己发现递归的那段程序k 好像有问题
各位高手门帮帮我吧!

zachary7833 2003-11-19
  • 打赏
  • 举报
回复
ps:
RUN后:

Input the total dots and edges:6 8
Input the begin dot,end dot and the weight of the edge:
1 2 3 1 3 2 2 4 2 3 4 4 2 5 3 5 6 1 4 6 2 3 6 3
矩阵如下:
0 3 2 0 0 0
0 0 0 2 3 0
0 0 0 4 0 3
0 0 0 0 0 2
0 0 0 0 0 1
0 0 0 0 0 0

Ee[1]:0 Ee[2]:3 Ee[3]:2 Ee[4]:6 Ee[5]:6 Ee[6]:0(为什么Ee[6]=0?递归哪里错了?)

El[1]:32767 El[2]:32767 El[3]:-6 El[4]:-2 El[5]:-1 El[6]:0(为什么只递归[4][6] [5][6] [3][4]这几条边?)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧