问题描述
- 程序错误求修改!!!!
-
请问下面代码段中有向图邻接表的建立错在哪了??求帮助!!!!
#include
using namespace std;
#define MaxVertexNum 50
typedef struct edge //建立邻接表存储结构,边表
{int AdjVertex; //邻接点域
struct edge *NextEdge; //指向下一个边结点
}EdgeType;
typedef struct //建立顶点表
{int Vertex; //顶点信息
int indegree; //入度域
EdgeType *FirstEdge; //邻接表头指针
}VertexType;
typedef VertexType adjlist[MaxVertexNum]; //定义adjlist为邻接表类型void Toposort(adjlist GL,int n) //拓扑排序
{int top=0;
int tpv[12];
EdgeType *t;
int i,j,k;
for(i=1;i<=n;i++) //建立入度为0的顶点栈,邻接表数组中下标为0的元素未用
if(GL[i].indegree==0)
{GL[i].indegree=top;
top=i;
}
i=0; //i为已产生的拓扑序列的顶点个数
while(top!=0)
{j=top; //取得栈顶的顶点j
top=GL[top].indegree; //更新栈顶指示器
tpv[++i]=j; //输出顶点j
t=GL[j].FirstEdge; //取邻接表的第j个链表表头结点
while(t!=NULL)
{k=t->AdjVertex; //取顶点值if(--(GL[k].indegree)==0) //顶点k的入度减1后是为0
{GL[k].indegree=top; //顶点k进栈
top=k;
}
t=t->NextEdge; //顶点j的下一个后继结点
}
}
if(i
cout
else if(i>=n)
{cout<<"拓扑序列为:"; //输出拓扑序列
for(i=1;i<=n;i++)
cout<
}
}
void main()
{int i,j,k,n,e,I;
int v1,v2;
EdgeType *p,*q;
adjlist Graph;
cout
cin>>n>>e;
cout<<"输入顶点的数据:"; //输入顶点的数据
for(k=0;k
{cin>>Graph[k].Vertex;
Graph[k].FirstEdge=NULL;
}
cout<<"输入个顶点的入度:";
for(k=0;k
{cin>>I;}
cout<<"输入图中各边:"; //输入图中各边
for(k=0;k
{cin>>v1>>v2;
i=v1; //找到v1的序号
j=v2; //找到v2的序号
q=new EdgeType;
q->AdjVertex=j;
q->NextEdge=Graph[i].FirstEdge;
Graph[i].FirstEdge=q;
p=new EdgeType;
p->AdjVertex=i;
p->NextEdge=Graph[j].FirstEdge;
Graph[j].FirstEdge=p;
}
cout<<"图的邻接表结构为:"<
for(i=0;i
{cout
v1=Graph[i].Vertex;
cout
p=Graph[i].FirstEdge;
while(p!=NULL)
{v2=p->AdjVertex;
cout<<"-->"<
p=p->NextEdge;
}
cout<<endl;
}
Toposort(Graph,12);
}