#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
struct node
{
int nodeNumber;
int childCount;
struct node** childArray;
};
typedef struct node Node;
struct input
{
int start;
int end;
struct input* next;
};
typedef struct input Input;
int PrintLoop(int array[],int currentCount,int maxLength,Node* head)
{
int currentNode = head->nodeNumber;
int i = 0,j=0,k=-1;
for(i=0;i<currentCount;i++)
{
if(array[i]==currentNode)
break;
}
if(i==currentCount)
{
array[i] = currentNode;
currentCount++;
for(j=0;j<head->childCount;j++)
{
k = PrintLoop(array,currentCount,maxLength,head->childArray[j]);
if(k==1)
break;
}
}
else
{
int minIndex = i,l=i;
int minNumber = array[i];
while(l<maxLength&&array[l]!=-1)
{
if(array[l]<minNumber)
{
minIndex = l;
minNumber = array[l];
}
l++;
}
if(minIndex!=maxLength-1&&array[minIndex+1]!=-1)
{
l = minIndex+1;
}
else
{
l = i;
}
while(l!=minIndex)
{
printf("->%d\n%d",array
[l
],array
[l
]); if(l!=maxLength-1&&array[l+1]!=-1)
{
l++;
}
else
{
l = i;
}
}
k = 1;
}
return k;
}
int main(void)
{
int i,j;
Input *inputHead=NULL,*tempInput=NULL,*lastInput=NULL;
int input;
Node
** nodeArray
= (Node
**)malloc(input
*sizeof(Node
*)); for(i=0;i<input;i++)
{
Node
* temp
= (Node
*)malloc(sizeof(Node
)); temp->nodeNumber = 0;
temp->childCount = 0;
temp->childArray = NULL;
nodeArray[i] = temp;
}
i=0;
while(i!=-1)
{
if(i!=-1)
{
tempInput
= (Input
*)malloc(sizeof(Input
)); tempInput->start = i;
nodeArray[i]->childCount++;
tempInput->next=NULL;
tempInput->end = i;
if(inputHead==NULL)
{
inputHead = tempInput;
lastInput = tempInput;
}
else
{
lastInput->next = tempInput;
lastInput = tempInput;
}
}
}
for(i=0;i<input;i++)
{
nodeArray
[i
]->childArray
= (Node
**)malloc(nodeArray
[i
]->childCount
*sizeof(Node
*)); nodeArray[i]->nodeNumber = nodeArray[i]->childCount-1;
}
while(inputHead!=NULL)
{
tempInput = inputHead;
nodeArray[tempInput->start]->childArray[nodeArray[tempInput->start]->nodeNumber] = nodeArray[tempInput->end];
nodeArray[tempInput->start]->nodeNumber--;
inputHead = inputHead->next;
}
int *array
= (int*)malloc(input
*sizeof(int)); for(i=0;i<input;i++)
{
nodeArray[i]->nodeNumber = i;
array[i] = -1;
}
j=-1;
for(i=0;i<input;i++)
{
j = PrintLoop(array,0,input,nodeArray[i]);
if(j==1)
{
break;
}
}
if(j==-1)
{
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2luY2x1ZGU8bWFsbG9jLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgoKc3RydWN0IG5vZGUKewppbnQgbm9kZU51bWJlcjsKaW50IGNoaWxkQ291bnQ7CnN0cnVjdCBub2RlKiogY2hpbGRBcnJheTsKfTsKCnR5cGVkZWYgc3RydWN0IG5vZGUgTm9kZTsKCnN0cnVjdCBpbnB1dAp7CmludCBzdGFydDsKaW50IGVuZDsKc3RydWN0IGlucHV0KiBuZXh0Owp9OwoKdHlwZWRlZiBzdHJ1Y3QgaW5wdXQgSW5wdXQ7CgppbnQgUHJpbnRMb29wKGludCBhcnJheVtdLGludCBjdXJyZW50Q291bnQsaW50IG1heExlbmd0aCxOb2RlKiBoZWFkKQp7CglpbnQgY3VycmVudE5vZGUgPSBoZWFkLT5ub2RlTnVtYmVyOwoJaW50IGkgPSAwLGo9MCxrPS0xOwoJZm9yKGk9MDtpPGN1cnJlbnRDb3VudDtpKyspCgl7CgkJaWYoYXJyYXlbaV09PWN1cnJlbnROb2RlKQoJCQlicmVhazsKCX0KCWlmKGk9PWN1cnJlbnRDb3VudCkKCXsKCQlhcnJheVtpXSA9IGN1cnJlbnROb2RlOwoJCWN1cnJlbnRDb3VudCsrOwoJCWZvcihqPTA7ajxoZWFkLT5jaGlsZENvdW50O2orKykKCQl7CQkKCQkJayA9IFByaW50TG9vcChhcnJheSxjdXJyZW50Q291bnQsbWF4TGVuZ3RoLGhlYWQtPmNoaWxkQXJyYXlbal0pOwoJCQlpZihrPT0xKQoJCQkJYnJlYWs7CgkJfQoJfQoJZWxzZQoJewoJCWludCBtaW5JbmRleCA9IGksbD1pOwoJCWludCBtaW5OdW1iZXIgPSBhcnJheVtpXTsKCQl3aGlsZShsPG1heExlbmd0aCYmYXJyYXlbbF0hPS0xKQoJCXsKCQkJaWYoYXJyYXlbbF08bWluTnVtYmVyKQoJCQl7CgkJCQltaW5JbmRleCA9IGw7CgkJCQltaW5OdW1iZXIgPSBhcnJheVtsXTsKCQkJfQoJCQlsKys7CQoJCX0KCQkKCQlwcmludGYoIiVkIixtaW5OdW1iZXIpOwoJCWlmKG1pbkluZGV4IT1tYXhMZW5ndGgtMSYmYXJyYXlbbWluSW5kZXgrMV0hPS0xKQoJCXsKCQkJbCA9IG1pbkluZGV4KzE7CgkJfQoJCWVsc2UKCQl7CgkJCWwgPSBpOwoJCX0KCgkJCQkKCgkJd2hpbGUobCE9bWluSW5kZXgpCgkJewoJCQlwcmludGYoIi0+JWRcbiVkIixhcnJheVtsXSxhcnJheVtsXSk7CgkJCWlmKGwhPW1heExlbmd0aC0xJiZhcnJheVtsKzFdIT0tMSkKCQkJewoJCQkJbCsrOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJbCA9IGk7CgkJCX0KCQl9CgkJcHJpbnRmKCItPiVkIixhcnJheVtsXSApOwoJCWsgPSAxOwoJfQpyZXR1cm4gazsKfQoKCmludCBtYWluKHZvaWQpCnsKCWludCBpLGo7CglJbnB1dCAqaW5wdXRIZWFkPU5VTEwsKnRlbXBJbnB1dD1OVUxMLCpsYXN0SW5wdXQ9TlVMTDsKCWludCBpbnB1dDsKCXNjYW5mKCIlZCIsJmlucHV0KTsKCU5vZGUqKiBub2RlQXJyYXkgPSAoTm9kZSoqKW1hbGxvYyhpbnB1dCpzaXplb2YoTm9kZSopKTsKCWZvcihpPTA7aTxpbnB1dDtpKyspCgl7CgkJTm9kZSogdGVtcCA9IChOb2RlKiltYWxsb2Moc2l6ZW9mKE5vZGUpKTsKCQl0ZW1wLT5ub2RlTnVtYmVyID0gMDsKCQl0ZW1wLT5jaGlsZENvdW50ID0gMDsKCQl0ZW1wLT5jaGlsZEFycmF5ID0gTlVMTDsKCQlub2RlQXJyYXlbaV0gPSB0ZW1wOwoJfQoJCglpPTA7Cgl3aGlsZShpIT0tMSkKCXsKCQlzY2FuZigiJWQiLCZpKTsKCQlpZihpIT0tMSkKCQl7CgkJCXRlbXBJbnB1dD0gKElucHV0KiltYWxsb2Moc2l6ZW9mKElucHV0KSk7CgkJCXRlbXBJbnB1dC0+c3RhcnQgPSBpOwoJCQlub2RlQXJyYXlbaV0tPmNoaWxkQ291bnQrKzsKCQkJdGVtcElucHV0LT5uZXh0PU5VTEw7CgkJCXNjYW5mKCIlZCIsJmkpOwoJCQl0ZW1wSW5wdXQtPmVuZCA9IGk7CgoJCQlpZihpbnB1dEhlYWQ9PU5VTEwpCgkJCXsKCQkJCWlucHV0SGVhZCA9IHRlbXBJbnB1dDsKCQkJCWxhc3RJbnB1dCA9IHRlbXBJbnB1dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCWxhc3RJbnB1dC0+bmV4dCA9IHRlbXBJbnB1dDsKCQkJCWxhc3RJbnB1dCA9IHRlbXBJbnB1dDsKCQkJfQoJCX0KCgl9CgoJZm9yKGk9MDtpPGlucHV0O2krKykKCXsKCQlub2RlQXJyYXlbaV0tPmNoaWxkQXJyYXkgPSAoTm9kZSoqKW1hbGxvYyhub2RlQXJyYXlbaV0tPmNoaWxkQ291bnQqc2l6ZW9mKE5vZGUqKSk7CgkJbm9kZUFycmF5W2ldLT5ub2RlTnVtYmVyID0gbm9kZUFycmF5W2ldLT5jaGlsZENvdW50LTE7Cgl9CgoJd2hpbGUoaW5wdXRIZWFkIT1OVUxMKQoJewoJCXRlbXBJbnB1dCA9IGlucHV0SGVhZDsKCQlub2RlQXJyYXlbdGVtcElucHV0LT5zdGFydF0tPmNoaWxkQXJyYXlbbm9kZUFycmF5W3RlbXBJbnB1dC0+c3RhcnRdLT5ub2RlTnVtYmVyXSA9IG5vZGVBcnJheVt0ZW1wSW5wdXQtPmVuZF07CgkJbm9kZUFycmF5W3RlbXBJbnB1dC0+c3RhcnRdLT5ub2RlTnVtYmVyLS07CgkJaW5wdXRIZWFkID0gaW5wdXRIZWFkLT5uZXh0OwoJCWZyZWUodGVtcElucHV0KTsKCX0KCWludCAqYXJyYXkgPSAoaW50KiltYWxsb2MoaW5wdXQqc2l6ZW9mKGludCkpOwoJZm9yKGk9MDtpPGlucHV0O2krKykKCXsKCQlub2RlQXJyYXlbaV0tPm5vZGVOdW1iZXIgPSBpOwoJCWFycmF5W2ldID0gLTE7Cgl9CglqPS0xOwoJZm9yKGk9MDtpPGlucHV0O2krKykKCXsKCQlqID0gUHJpbnRMb29wKGFycmF5LDAsaW5wdXQsbm9kZUFycmF5W2ldKTsKCQlpZihqPT0xKQoJCXsKCQkJYnJlYWs7CgkJfQoJfQoKCWlmKGo9PS0xKQoJewoJCXByaW50ZigiTm8gTG9vcCIpOwoJfQoJcmV0dXJuIDA7Cn0=