#include <stdio.h>
typedef struct TNode TNode;
struct TNode
{
TNode** nodes;
int checkPoints;
int walls;
int nodeCount;
int scanned;
int index;
};
int scan(TNode* node, int scanned){
node->scanned++;
int n = node->nodeCount - 1;
for (n; n >= 0; n--)
{
printf("%d ,", node
->nodes
[n
]->index
); if (node->nodes[n]->scanned < scanned)
{
scan(node->nodes[n], scanned);
}
}
return 0;
}
void initialization(int N, TNode * nodes)
{
int n = N;
for (n; n >= 0; --n)
{
nodes[n].checkPoints = 0;
nodes[n].nodes = 0;
nodes[n].walls = 0;
nodes[n].nodeCount = 0;
nodes[n].scanned = 0;
nodes[n].index = n;
}
}
void freeMemory(int N, TNode * nodes)
{
int n = N;
for (n; n >= 0; --n)
{
}
}
void createGraph(int lastPath, int * J, int * K, TNode * nodes)
{
int i = lastPath;
for (i; i >= 0; --i)
{
int nodeJ = J[i];
int nodeK = K[i];
//nodeJ
int lastNode = nodes[nodeJ].nodeCount;
nodes[nodeJ].nodeCount++;
if (lastNode == 0)
{
nodes
[nodeJ
].
nodes = (TNode
**) malloc(sizeof(TNode
*) * nodes
[nodeJ
].
nodeCount); }
else
{
realloc(nodes
[nodeJ
].
nodes, sizeof(TNode
*) * nodes
[nodeJ
].
nodeCount); }
nodes[nodeJ].nodes[lastNode] = &nodes[nodeK];
//nodeK
lastNode = nodes[nodeK].nodeCount;
nodes[nodeK].nodeCount++;
if (lastNode == 0)
{
nodes
[nodeK
].
nodes = (TNode
**) malloc(sizeof(TNode
*) * nodes
[nodeK
].
nodeCount); }
else
{
realloc(nodes
[nodeK
].
nodes, sizeof(TNode
*) * nodes
[nodeK
].
nodeCount); }
nodes[nodeK].nodes[lastNode] = &nodes[nodeJ];
}
}
void setCheckPoints(int M, TNode * nodes)
{
int c = M - 1;
for (c; c >= 0; --c)
{
nodes[c].checkPoints++;
}
}
int generate(int J [], int K [], int N, int L [], int M){
if (M>0)
{
int intersections = N + 1;
TNode
*nodes
= (TNode
*) malloc((intersections
) * sizeof(TNode
)); int lastPath = N - 1;
initialization(N, nodes);
createGraph(lastPath, J, K, nodes);
setCheckPoints(M, nodes);
//Scan
int c = 0;
for (c; c < M; c++)
{
scan(&nodes[c], c);
}
freeMemory(N, nodes);
return 0;
}
else
{
return 0;
}
}
int main(void) {
int J[8] = { 0, 1, 2, 3, 3, 2, 6, 6 };
int K[8] = { 1, 2, 3, 4, 5, 6, 8, 7 };
int L[2] = { 0, 1};
generate(J, K, 8, L, 2);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgkJdHlwZWRlZiBzdHJ1Y3QgVE5vZGUgVE5vZGU7CgoJCXN0cnVjdCBUTm9kZQoJCXsKCQkJVE5vZGUqKiBub2RlczsKCQkJaW50IGNoZWNrUG9pbnRzOwoJCQlpbnQgd2FsbHM7CgkJCWludCBub2RlQ291bnQ7CgkJCWludCBzY2FubmVkOwoJCQlpbnQgaW5kZXg7CgkJfTsKCgkJaW50IHNjYW4oVE5vZGUqIG5vZGUsIGludCBzY2FubmVkKXsKCQkJbm9kZS0+c2Nhbm5lZCsrOwoJCQlwcmludGYoIiVkIHwgIiwgbm9kZS0+aW5kZXgpOwoJCQlpbnQgbiA9IG5vZGUtPm5vZGVDb3VudCAtIDE7CgkJCWZvciAobjsgbiA+PSAwOyBuLS0pCgkJCXsKCQkJCXByaW50ZigiJWQgLCIsIG5vZGUtPm5vZGVzW25dLT5pbmRleCk7CgkJCQlpZiAobm9kZS0+bm9kZXNbbl0tPnNjYW5uZWQgPCBzY2FubmVkKQoJCQkJewoJCQkJCXNjYW4obm9kZS0+bm9kZXNbbl0sIHNjYW5uZWQpOwoJCQkJfQkJCgkJCX0KCQkJcHJpbnRmKCJcblxyIik7CgkJCXJldHVybiAwOwoJCX0KCgkJdm9pZCBpbml0aWFsaXphdGlvbihpbnQgTiwgVE5vZGUgKiBub2RlcykKCQl7CgkJCWludCBuID0gTjsKCQkJZm9yIChuOyBuID49IDA7IC0tbikKCQkJewoJCQkJbm9kZXNbbl0uY2hlY2tQb2ludHMgPSAwOwoJCQkJbm9kZXNbbl0ubm9kZXMgPSAwOwoJCQkJbm9kZXNbbl0ud2FsbHMgPSAwOwoJCQkJbm9kZXNbbl0ubm9kZUNvdW50ID0gMDsKCQkJCW5vZGVzW25dLnNjYW5uZWQgPSAwOwoJCQkJbm9kZXNbbl0uaW5kZXggPSBuOwoJCQl9CgkJfQoKCQl2b2lkIGZyZWVNZW1vcnkoaW50IE4sIFROb2RlICogbm9kZXMpCgkJewoJCQlpbnQgbiA9IE47CgkJCWZvciAobjsgbiA+PSAwOyAtLW4pCgkJCXsKCQkJCWZyZWUobm9kZXNbbl0ubm9kZXMpOwkJCgkJCX0KCQl9CgoJCXZvaWQgY3JlYXRlR3JhcGgoaW50IGxhc3RQYXRoLCBpbnQgKiBKLCBpbnQgKiBLLCBUTm9kZSAqIG5vZGVzKQoJCXsKCQkJaW50IGkgPSBsYXN0UGF0aDsKCQkJZm9yIChpOyBpID49IDA7IC0taSkKCQkJewoJCQkJaW50IG5vZGVKID0gSltpXTsKCQkJCWludCBub2RlSyA9IEtbaV07CgkJCQkvL25vZGVKCgkJCQlpbnQgbGFzdE5vZGUgPSBub2Rlc1tub2RlSl0ubm9kZUNvdW50OwoJCQkJbm9kZXNbbm9kZUpdLm5vZGVDb3VudCsrOwoJCQkJaWYgKGxhc3ROb2RlID09IDApCgkJCQl7CgkJCQkJbm9kZXNbbm9kZUpdLm5vZGVzID0gKFROb2RlKiopIG1hbGxvYyhzaXplb2YoVE5vZGUqKSAqIG5vZGVzW25vZGVKXS5ub2RlQ291bnQpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJlYWxsb2Mobm9kZXNbbm9kZUpdLm5vZGVzLCBzaXplb2YoVE5vZGUqKSAqIG5vZGVzW25vZGVKXS5ub2RlQ291bnQpOwoJCQkJfQoKCQkJCW5vZGVzW25vZGVKXS5ub2Rlc1tsYXN0Tm9kZV0gPSAmbm9kZXNbbm9kZUtdOwoJCQkJLy9ub2RlSwoJCQkJbGFzdE5vZGUgPSBub2Rlc1tub2RlS10ubm9kZUNvdW50OwoJCQkJbm9kZXNbbm9kZUtdLm5vZGVDb3VudCsrOwoJCQkJaWYgKGxhc3ROb2RlID09IDApCgkJCQl7CgkJCQkJbm9kZXNbbm9kZUtdLm5vZGVzID0gKFROb2RlKiopIG1hbGxvYyhzaXplb2YoVE5vZGUqKSAqIG5vZGVzW25vZGVLXS5ub2RlQ291bnQpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJlYWxsb2Mobm9kZXNbbm9kZUtdLm5vZGVzLCBzaXplb2YoVE5vZGUqKSAqIG5vZGVzW25vZGVLXS5ub2RlQ291bnQpOwoJCQkJfQoJCQkJbm9kZXNbbm9kZUtdLm5vZGVzW2xhc3ROb2RlXSA9ICZub2Rlc1tub2RlSl07CgkJCX0KCQl9CgoJCXZvaWQgc2V0Q2hlY2tQb2ludHMoaW50IE0sIFROb2RlICogbm9kZXMpCgkJewoJCQlpbnQgYyA9IE0gLSAxOwoJCQlmb3IgKGM7IGMgPj0gMDsgLS1jKQoJCQl7CgkJCQlub2Rlc1tjXS5jaGVja1BvaW50cysrOwoJCQl9CgkJfQoKCQlpbnQgZ2VuZXJhdGUoaW50IEogW10sIGludCBLIFtdLCBpbnQgTiwgaW50IEwgW10sIGludCBNKXsKCQkJaWYgKE0+MCkKCQkJewoJCQkJaW50IGludGVyc2VjdGlvbnMgPSBOICsgMTsKCQkJCVROb2RlICpub2RlcyA9IChUTm9kZSAqKSBtYWxsb2MoKGludGVyc2VjdGlvbnMpICogc2l6ZW9mKFROb2RlKSk7CgkJCQlpbnQgbGFzdFBhdGggPSBOIC0gMTsKCQkJCWluaXRpYWxpemF0aW9uKE4sIG5vZGVzKTsKCQkJCWNyZWF0ZUdyYXBoKGxhc3RQYXRoLCBKLCBLLCBub2Rlcyk7CgkJCQlzZXRDaGVja1BvaW50cyhNLCBub2Rlcyk7CgkJCQkvL1NjYW4KCQkJCWludCBjID0gMDsKCQkJCWZvciAoYzsgYyA8IE07IGMrKykKCQkJCXsKCQkJCQlzY2FuKCZub2Rlc1tjXSwgYyk7CgkJCQl9CgkJCQlmcmVlTWVtb3J5KE4sIG5vZGVzKTsKCQkJCWZyZWUobm9kZXMpOwoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlyZXR1cm4gMDsKCQkJfQkKCQl9CmludCBtYWluKHZvaWQpIHsKCQkJCWludCBKWzhdID0geyAwLCAxLCAyLCAzLCAzLCAyLCA2LCA2IH07CgkJCWludCBLWzhdID0geyAxLCAyLCAzLCA0LCA1LCA2LCA4LCA3IH07CgkJCWludCBMWzJdID0geyAwLCAxfTsKCQkJZ2VuZXJhdGUoSiwgSywgOCwgTCwgMik7CglyZXR1cm4gMDsKfQo=