#include <stdio.h>
int Index(char x, char name[]);
int inDgree(int j, int a[11][11]);
int main()
{
char name[11] = {
'S',
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'T',
};
int a[11][11];
for (int i = 10; i >= 0; i--)
{
for (int j = 0; j < 11; j++)
{
a[i][j] = 0;
}
}
a[0][1] = 1;
a[0][4] = 1;
a[0][7] = 1;
a[1][2] = 1;
a[1][5] = 1;
a[2][3] = 1;
a[3][10] = 1;
a[4][1] = 1;
a[4][5] = 1;
a[5][3] = 1;
a[5][6] = 1;
a[5][9] = 1;
a[6][3] = 1;
a[6][10] = 1;
a[7][4] = 1;
a[7][5] = 1;
a[7][8] = 1;
a[8][5] = 1;
a[8][9] = 1;
a[9][10] = 1;
a[9][6] = 1;
char c1, c2;
scanf("%c,%c", &c1, &c2);
int x = Index(c1, name);
int y = Index(c2, name);
a[x][y] = 0;
int queue[11];
int front = 0;
int rear = -1;
int size = 0;
for (int j = 0; j < 11; j++)
{
int inDeg = inDgree(j, a);
if (inDeg == 0)
{
queue[++rear] = j;
size++;
}
}
while (size != 0)
{
int x = queue[front++]; //即将被删掉的元素
printf("%c,", name[x]);
size--;
for (int j = 0; j < 11; j++)
{
if (a[x][j] == 1)
{
a[x][j] = 0;
if (inDgree(j, a) == 0)
{
queue[++rear] = j;
size++;
}
}
}
}
return 0;
}
int Index(char x, char name[])
{
for (int i = 0; i < 11; i++)
{
if (x == name[i])
{
return i;
}
}
return -1;
}
int inDgree(int j, int a[11][11])
{
int inDegree = 0;
for (int i = 0; i < 11; i++)
{
inDegree = inDegree + a[i][j];
}
return inDegree;
}
邻接矩阵 拓扑排序OJ7-2 B. 拓扑排序
最新推荐文章于 2021-11-19 16:35:55 发布