码迷,mamicode.com
首页 > 编程语言 > 详细

拓扑排序 HDU1285

时间:2015-03-27 21:59:24      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

这个题是个模板题,可以直接用拓扑排序的模板来做,

AC代码

技术分享
#include <stdio.h>
#include<iostream>
#include <string.h>
using namespace std;
const int N = 1000;
int n, m;
int Map[N][N];
int topNum[N];
bool toposort(int *ret)
{
    int Indegree[N];
    memset(Indegree, 0, sizeof(Indegree));
    int k = 0;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
            Indegree[i] += Map[j][i];//计算入度,没有边的时候Map[j][i]为0
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (Indegree[j] == 0)
            {
                --Indegree[j];
                ret[k++] = j;
                for (int t = 1; t <= n; t++)
                    if (Map[j][t])
                        Indegree[t]--;
                break;
            }
        }   
            
    }
    if (k == n)
        return true;
    return false;
}
int main()
{
    int a, b;
    while (cin >> n >> m)
    {
        memset(Map, 0, sizeof(Map));
        for (int i = 0; i < m; i++)
        {
            cin >> a >> b;
            Map[a][b] = 1;
        }
        toposort(topNum);   
        for (int i = 0; i < n; i++)
        {
            if (i == n - 1)
                printf("%d\n", topNum[i]);
            else
                printf("%d ", topNum[i]);
        }
    }
    

    return 0;
}
View Code

 

拓扑排序 HDU1285

标签:

原文地址:http://www.cnblogs.com/Howe-Young/p/4372943.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!