1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | //print paths in a tree without recursion #include<iostream> #include<vector> #include<stack> using namespace std; struct node { int data; vector<node*>children; }; int visited[100]; stack <node*> st; int count=0; int n; void printpath(node * root) //dfs starts here { st.push(root); while(visited[0]==0) { node* v=st.top(); if(visited[v->data]!=0) // leaf nodes or nodes whose all children st.pop(); // are visited are only popped from the stack if(visited[v->data]) continue; cout<<v->data<<" "; int flag=0; for(int i=0;i<v->children.size();i++) /*check if any of the children have not been visited*/ { if(visited[v->children[i]->data]==0) { flag=flag||1; st.push(v->children[i]); } else flag=flag||0; } /*if this is the leaf node then mark it visited and along with other intermediate nodes whose all the children have been visited.this is continued till we reach root which has the value 0 in its data*/ if(flag==0) { visited[v->data]=1; while(v->data!=0) { v=st.top(); int flag=0; for(int i=0;i<v->children.size();i++) { if(visited[v->children[i]->data]==0) flag=flag||1; else flag=flag||0; } if(flag==0 && v->children.size()!=0) visited[v->data]=1; if(v->data!=0) st.pop(); } cout<<endl; } } } main() { n=8; for(int i=0;i<9;i++) visited[i]=0; node*root = new node(); //tree construction root->data=0; node* d = new node(); d->data=1; node* m = new node(); m->data=2; node* n = new node(); n->data=3; root->children.push_back(d); root->children.push_back(m); root->children.push_back(n); node* x = new node(); x->data=4; node* y = new node(); y->data=5; node* z = new node(); z->data=6; d->children.push_back(x); d->children.push_back(y); d->children.push_back(z); node* o = new node(); o->data=7; node* p = new node(); p->data=8; n->children.push_back(o); n->children.push_back(p); printpath(root); } |
Ly9wcmludCBwYXRocyBpbiBhIHRyZWUgd2l0aG91dCByZWN1cnNpb24KI2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RhY2s+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0cnVjdCBub2RlICAgICAgICAgICAgICAgICAgICAgICAgIAp7CiAgICAgICBpbnQgZGF0YTsKICAgICAgIHZlY3Rvcjxub2RlKj5jaGlsZHJlbjsKfTsKaW50IHZpc2l0ZWRbMTAwXTsKc3RhY2sgPG5vZGUqPiBzdDsKaW50IGNvdW50PTA7CmludCBuOyAgICAgIAp2b2lkIHByaW50cGF0aChub2RlICogcm9vdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kZnMgc3RhcnRzIGhlcmUKewogICAgIHN0LnB1c2gocm9vdCk7CiAgICAgd2hpbGUodmlzaXRlZFswXT09MCkKICAgICB7CiAgICAgICAgIG5vZGUqIHY9c3QudG9wKCk7CiAgICAgICAgIGlmKHZpc2l0ZWRbdi0+ZGF0YV0hPTApICAgICAgICAgICAgICAgICAvLyBsZWFmIG5vZGVzIG9yIG5vZGVzIHdob3NlIGFsbCBjaGlsZHJlbiAKICAgICAgICAgICAgc3QucG9wKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSB2aXNpdGVkIGFyZSBvbmx5IHBvcHBlZCBmcm9tIHRoZSBzdGFjawogICAgICAgICBpZih2aXNpdGVkW3YtPmRhdGFdKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgY291dDw8di0+ZGF0YTw8IiAiOwogICAgICAgICBpbnQgZmxhZz0wOwogICAgICAgICBmb3IoaW50IGk9MDtpPHYtPmNoaWxkcmVuLnNpemUoKTtpKyspICAgICAgLypjaGVjayBpZiBhbnkgb2YgdGhlIGNoaWxkcmVuIGhhdmUgbm90IGJlZW4gdmlzaXRlZCovCiAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZih2aXNpdGVkW3YtPmNoaWxkcmVuW2ldLT5kYXRhXT09MCkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBmbGFnPWZsYWd8fDE7CiAgICAgICAgICAgICAgICAgICAgICBzdC5wdXNoKHYtPmNoaWxkcmVuW2ldKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgIGZsYWc9ZmxhZ3x8MDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLyppZiB0aGlzIGlzIHRoZSBsZWFmIG5vZGUgdGhlbiBtYXJrIGl0IHZpc2l0ZWQgYW5kCiAgICAgICAgIGFsb25nIHdpdGggb3RoZXIgaW50ZXJtZWRpYXRlIG5vZGVzIHdob3NlIGFsbCB0aGUgICAKICAgICAgICAgY2hpbGRyZW4gaGF2ZSBiZWVuIHZpc2l0ZWQudGhpcyBpcyBjb250aW51ZWQgdGlsbCB3ZQogICAgICAgICByZWFjaCByb290IHdoaWNoIGhhcyB0aGUgdmFsdWUgMCBpbiBpdHMgZGF0YSovCiAgICAgICAgIAogICAgICAgICBpZihmbGFnPT0wKQogICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICB2aXNpdGVkW3YtPmRhdGFdPTE7ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgd2hpbGUodi0+ZGF0YSE9MCkgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgdj1zdC50b3AoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWc9MDsKICAgICAgICAgICAgICAgICAgICAgZm9yKGludCBpPTA7aTx2LT5jaGlsZHJlbi5zaXplKCk7aSsrKQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZpc2l0ZWRbdi0+Y2hpbGRyZW5baV0tPmRhdGFdPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWc9ZmxhZ3x8MTsKICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnPWZsYWd8fDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmxhZz09MCAmJiB2LT5jaGlsZHJlbi5zaXplKCkhPTApCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZFt2LT5kYXRhXT0xOwogICAgICAgICAgICAgICAgICAgICAgICBpZih2LT5kYXRhIT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgIHN0LnBvcCgpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGNvdXQ8PGVuZGw7CiAgICAgICAgIH0KICAgICB9Cn0KbWFpbigpCnsKICAgbj04OwogICBmb3IoaW50IGk9MDtpPDk7aSsrKQogICAgICAgdmlzaXRlZFtpXT0wOwogICBub2RlKnJvb3QgPSBuZXcgbm9kZSgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvL3RyZWUgY29uc3RydWN0aW9uCiAgIHJvb3QtPmRhdGE9MDsKICAgbm9kZSogZCA9IG5ldyBub2RlKCk7CiAgIGQtPmRhdGE9MTsKICAgbm9kZSogbSA9IG5ldyBub2RlKCk7CiAgIG0tPmRhdGE9MjsKICAgbm9kZSogbiA9IG5ldyBub2RlKCk7CiAgIG4tPmRhdGE9MzsKICAgcm9vdC0+Y2hpbGRyZW4ucHVzaF9iYWNrKGQpOwogICByb290LT5jaGlsZHJlbi5wdXNoX2JhY2sobSk7CiAgIHJvb3QtPmNoaWxkcmVuLnB1c2hfYmFjayhuKTsKICAgbm9kZSogeCA9IG5ldyBub2RlKCk7CiAgIHgtPmRhdGE9NDsKICAgbm9kZSogeSA9IG5ldyBub2RlKCk7CiAgIHktPmRhdGE9NTsKICAgbm9kZSogeiA9IG5ldyBub2RlKCk7CiAgIHotPmRhdGE9NjsKICAgZC0+Y2hpbGRyZW4ucHVzaF9iYWNrKHgpOwogICBkLT5jaGlsZHJlbi5wdXNoX2JhY2soeSk7CiAgIGQtPmNoaWxkcmVuLnB1c2hfYmFjayh6KTsKICAgbm9kZSogbyA9IG5ldyBub2RlKCk7CiAgIG8tPmRhdGE9NzsKICAgbm9kZSogcCA9IG5ldyBub2RlKCk7CiAgIHAtPmRhdGE9ODsKICAgbi0+Y2hpbGRyZW4ucHVzaF9iYWNrKG8pOwogICBuLT5jaGlsZHJlbi5wdXNoX2JhY2socCk7CiAgIHByaW50cGF0aChyb290KTsKfQogICAKICAgICAgICAg
-
upload with new input
-
result: Success time: 0.01s memory: 2860 kB returned value: 0
0 3 8 0 3 7 0 2 0 1 6 0 1 5 0 1 4


