Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct node{
- int nb[10];
- int nbLen;
- int color;
- int from;
- int touch;
- int finish;
- };
- struct node N[10];
- struct tuple{
- int ind;
- int fnsh;
- };
- //struct node T;
- //T.nbLen;
- //scanf("%d", &T.nb[2]);
- //scanf("%d", N[2].nb[8]);
- int nl, nbl;
- int time;
- int arr[10];
- int len = 10;
- int top = -1;
- int isFull();
- int isEmpty();
- int push(int n);
- int pop();
- // void printStack();
- int isFull(){
- if(top == len-1)
- return 1;
- else
- return 0;
- }
- int isEmpty(){
- if(top <= -1)
- return 1;
- else
- return 0;
- }
- int push(int n){
- if(isFull() != 1){
- top++;
- arr[top] = n;
- return 1;
- }else{
- printf("full");
- return 0;
- }
- }
- int pop(){
- if(isEmpty() != 1){
- top--;
- return arr[top+1];
- }else{
- printf("is Empty");
- return -1;
- }
- }
- //void printStack(){
- // int i;
- // for(i = 0; i <= top; i++)
- // printf("%d ", arr[i]);
- //
- // printf("\n");
- //}
- void printNB(int n){
- int i;
- for(i = 0; i < N[n].nbLen ; i++)
- printf("%d ", N[n].nb[i]);
- printf("\n");
- }
- int initialize(){
- int i;
- for(i = 0; i < nl; i++){
- N[i].color = 100;
- N[i].from = -1;
- N[i].touch = 0;
- N[i].finish = 0;
- }
- time = 1;
- }
- void DFS(int m){
- push(m);
- N[m].color = 200;
- N[m].touch = time;
- time++;
- int j;
- for(j = 0; j < N[m].nbLen; j++){
- if(N[ N[m].nb[j] ].color == 100)
- DFS(N[m].nb[j]);
- }
- pop();
- N[m].color = 300;
- N[m].finish = time;
- time++;
- }
- int compare(const void *a, const void *b){
- struct tuple* A = (struct tuple*)a;
- struct tuple* B = (struct tuple*)b;
- if (A[0].fnsh < B[0].fnsh) return 1;
- else if (A[0].fnsh > B[0].fnsh) return -1;
- else return 0;
- }
- void print(){
- struct tuple M[10];
- int i;
- for(i = 0; i < nl; i++){
- M[i].ind = i;
- M[i].fnsh = N[i].finish;
- }
- qsort(M, nl, sizeof(struct tuple), compare);
- for(i = 0; i < nl; i++)
- printf("%d ", M[i].ind);
- }
- int main(){
- int i;
- // for(i=0;i<7;i++) push(i*10);
- // printStack();
- // for(i=0;i<4;i++) printf("%d ",pop());
- // printf("\n");
- // for(i=0;i<8;i++) push(i*100);
- // printStack();
- int index, x, y;
- scanf("%d %d", &nl, &nbl);
- for(i = 0; i < nl; i++)
- N[i].nbLen = 0;
- for(i = 0; i < nbl; i++){
- scanf("%d", &x);
- scanf("%d", &y);
- index = N[x].nbLen;
- N[x].nb[ index ] = y;
- N[x].nbLen++;
- }
- // for(i = 0; i < nl; i++) printNB(i);
- initialize();
- int j;
- for(j = 0; j < nl; j++){
- if(N[j].color == 100)
- DFS(j);
- }
- // for(j = 0; j < nl; j++) printf("%d, %d\n", N[j].touch, N[j].finish);
- print();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement