从一组依赖项中查找正确的顺序

时间:2017-09-20 13:21:24

标签: c dependencies relationships topological-sort

所以这是我的问题: 输入: N,第一行中的步骤总数。每个步骤从0到N-1隐式编号。第二行中的数字K.然后下一个K行每个包含2个整数。每条这样的线代表一个依赖:如果“X Y”在一行中,则必须在步骤Y之前执行步骤X.

输出: 一行包含正确顺序的步骤。如果可能有多个这样的正确订单,那么请尽早打印出较小数字的订单。

示例:

3

2

1 0

0 3

1 0 3

到目前为止,这是我的代码。我不知道如何在排序后比较元素,以获得所需的格式。任何线索都会受到赞赏..谢谢。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main(){

    int n,k,i,j,temp,a=2;
    scanf("%d",&n);
    scanf("%d",&k);
    int arr[k][2];
    int ans[n];
    for(i=0;i<k;i++)
        scanf("%d %d",&arr[i][0],&arr[i][1]);

    for(i=0;i<k;i++){
        for(j=i+1;j<k;j++){

            if(arr[i][0]>arr[j][0]){
                temp = arr[i][0];
                arr[i][0] = arr[j][0];
                arr[j][0] = temp;

                temp = arr[i][1];
                arr[i][1] = arr[j][1];
                arr[j][1] = temp;
            }
        }
    }
    /*
    for(i=0;i<k;i++)
        printf("%d   %d\n",arr[i][0],arr[i][1]);
    */
    ans[0] = arr[0][0];
    ans[1] = arr[0][1];

    /*done[n];
    for(i=0;i<n;i++)
        done[i] = 0;
    done[arr[0][0]] = 1;
    done[arr[0][1]] = 1;
    for(i=1;i<k;i++){

        if(done[arr[i][0]] == 0 || done[arr[i]])
    }
    */

    for(i=0;i<n;i++)
        printf("%d  ",ans[i]);
    printf("\n\n");
    return 0;
}

0 个答案:

没有答案