数据结构,拓扑排序问题,谢谢解答!

[复制链接]
查看11 | 回复5 | 2021-1-27 06:33:05 | 显示全部楼层 |阅读模式
拓扑排序的问题,头文件topo.h
#include
usingnamespacestd;
typedefstruct
{
char*data;
int*visited;
float**edge;
intmax,size;
}Graph;
typedefstruct
{
charw1,w2;//行号,列号
intw;//权值
}RCW;
//初始化图
voidSetGraph(Graph*G,intn)
{
inti,j;
G->data=newchar[n];
G->visited=newint[n];
G->edge=(float**)malloc(n*sizeof(float*));
for(i=0;iedge=(float*)malloc(n*sizeof(float*));
}
for(i=0;ivisited=0;
for(i=0;iedge[j]=0;
G->max=n;
G->size=0;
}
//构造图
voidMakeGraph(Graph*G,RCWr[],intn,inte)
{
intm=0;
while(msize==G->max)
{
coutdata[G->size]='a'+m;//第一个点的权值加m
G->size++;
m++;
}
//插入弧
for(intp=0;pdata[k])
i=k;
if(r[p].w2==G->data[k])
j=k;
//把括号下移了!
G->edge[j]=r[p].w;
}
}
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:33:05 | 显示全部楼层
这个是CPP#include
#include
#include
#include"graph.h"
typedefstruct
{
int*data;
intmax,top;
}Stack;
voidTopSort(Graph*G)
{
inti,j,n,d,count=0,*D;
StackS;
if(G->size==0)return;
n=G->size;
S.data=newint[n];
S.max=n;
S.top=-1;
D=newint[n];//存储每个结点入度
for(j=0;jedge[j]!=0)d++;
D[j]=d;
if(d==0)
{
if(S.top==S.max-1)
{
coutdataedge[j]!=0)
{
D[j]--;
if(D[j]==0)
{if(S.top==S.max-1)
{cout
每次会出现thereisacycle!可是根据数据不会成环啊!而且输出后会提示:
Windows已在Topo1.exe中触发一个断点。
其原因可能是堆被损坏,这说明Topo1.exe中或它所加载的任何DLL中有Bug。
原因也可能是用户在Topo1.exe具有焦点时按下了F12。

求好心人帮忙编译下,找到错误!!!!感激不尽!!(*^__^*)

回复

使用道具 举报

千问 | 2021-1-27 06:33:05 | 显示全部楼层
帮你顶一下,我也在学习中.
回复

使用道具 举报

千问 | 2021-1-27 06:33:05 | 显示全部楼层
http://hi.baidu.com/%B3%CB%B7%E7%CC%A4%C0%CB2008/blog/item/25e348d5b91b93c351da4bf7.html#comment
回复

使用道具 举报

千问 | 2021-1-27 06:33:05 | 显示全部楼层

1.
typedefstruct
{
char*data;
int*visited;
float**edge;//float?
intmax,size;
}Graph;
float不能与0直接比较相等不等。
2.运行(堆破坏)错误原因:
free(D);
free(S.data);
在循环体里,被调用了多次。只申请了一次。这不是你的意图吧?
3.不好的风格:
你一会用new(c++)的,一会用malloc,free(c的)。
要知道new与delete配对,malloc与free配对。
回复

使用道具 举报

千问 | 2021-1-27 06:33:05 | 显示全部楼层

1.float不能与0比较不等是说这句:G->edge[j]!=0
真要比较应该用fabs(G->edge[j])
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行