#include<stdio.h>
int a[10][10],n;
void init() //初始化 完成图的输入以及计算各顶点的入度
{ //将图存储在邻接矩阵中
int i,j;
printf("输入定点个数:");
scanf("%d",&n);
while (i) //输入边
{
printf("input begin and end(以0为结束):");
scanf("%d,%d",&i,&j);
a[i][j]=1;
}
for (j=1;j<=n;j++) //计算顶点入度个数 将其存放在第0列中
for (i=1;i<=n;i++)
if (a[i][j]==1)
a[j][0]+=1;
for (i=1;i<=n;i++)
printf("顶点%d的入度是%d/n",i,a[i][0]);
}
void sort() //拓扑排序
{
int count=0,i,j;
while (count<n)
{
for (i=1;i<=n;i++)
if (a[i][0]==0) //选择入度为0的顶点
{
a[i][0]=1; //将其入度数制为非0值,避免循环时2次输出
printf("%d",i);
count++;
for (j=1;j<=n;j++)
{
if (a[i][j]==1)
{
a[j][0]--; // 将该以顶点为尾的边的头顶点的入度数减1
a[i][j]=0; //将该以顶点为尾的边去掉
}
}
}
}
}
int main()
{
init();
sort();
}