求拓朴排序后结果及用矩阵表示输入形式为n (就是上机练习题上的哪个题不过多加了一个用矩阵表示)
输入一串整数以相反次序输出
第题我做的答案是这样的第题太简单就不用了
// 有点未加判断矩阵输出及拓扑排序
#include
#include
#include
#define MAX
typedef struct {
int arcs[MAX][MAX];
int vexnum;
}Mgraph;
void input(Mgraph *mgraphint iint *count)
{
int abc=;
for(int j=;j
for(int k=0;k
mgraph->arcs[j][k]=0;
while(1){
printf("输入(i j),(-1 -1)结束:");
scanf("%d%d",&a,&b);
if(a==-1 && b==-1)
break;
else
{
mgraph->arcs[a]=1;continue;
}
}
for (int k=0;k
int c=0;
for(int m=0;m
if(mgraph->arcs[m][k]==1)
c++;
}
count1[k]=c;
}
printf("\n矩阵为:\n");
for(int l=0;l
for(int m=0;m
printf("%3d",mgraph->arcs[l][m]);
c1=c1+1;
if(c1==i){
printf("\n");
c1=0;
}
}
}
//拓扑排序
void topsort(Mgraph * mgraph,int i,int *count){
int a,b,c=0,s=-1;
for(a=0;a
if(count[a]==0){
count[a]=s;
s=a;
}
}
while(s!=-1){
printf("V(%d) ",s);
c++;
a=s;
s=count[a];
for(b=0;b
if(mgraph->arcs[a]){
count--;
if (count==0){
count=s;
s=b;
}
}
}
}
}
void main(){
Mgraph mgraph;
int i;
printf("输入顶点个数:");
scanf("%d",&i);
int count1[MAX];
input(&mgraph,i,count1);
topsort(&mgraph,i,count1);
}