您的位置:首页 > 其它

拓扑排序 HDU 1285 确定比赛名次

2015-03-19 20:40 435 查看
在图中找打入度为0的节点。
删除这个入度为0的点,更新所有节点的入度。
重复1/2步骤。直到输出所有节点。

#include<iostream>
#include<cstdio>
#include<cstring>

using namespace std;

int map[510][510];//存图
int in_dege[510];//入度个数
int m, n;

void topo_sort()
{
int i, j;
memset(in_dege, 0, sizeof(in_dege));
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
in_dege[i] += map[j][i];
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; in_dege[j] && j <= n; j++);
in_dege[j] = -1;
for (int k = 1; k <= n; k++)
{
in_dege[k] -= map[j][k];
}
if (i == 1)
{
printf("%d", j);
}
else
{
printf(" %d", j);
}
}
printf("\n");
}

int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
memset(map, 0, sizeof(map));
for (int i = 1; i <= m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
map[a][b] = 1;
}
topo_sort();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  拓扑排序