#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
#undef DEBUG
#ifdef DEBUG
#define debug(...) fprintf(stderr, __VA_ARGS__)
#else
#define debug(...) do ; while(0)
#endif
#define MAX_EDGES 20 + 1 //We add one so we can start storing from vector[1] and not vector[0] for easineess
#define MAX_NODES 80 + 1
#define UNVISITED 0
#define VISITED 1
vector<int> adj[MAX_NODES + 1];
queue<int> Q;
int target;
int bfs(int src)
{
int front;
unsigned int i;
/* We should not treat root seperately except when we push it
* if(src == target) //If src (and this time root) is our target
return src; //Then return it
for(i = 1; i <= adj[src].size();i++) { //While i is in bounds of the root's neighboor list
Q.push( adj[src].at(i) ); //Push root's neighboor i in the list
}
*/
Q.push(src);
while(!Q.empty()) { //While Q is not empty
front = Q.front(); //Store the front member to be examined
Q.pop(); //and pop it
if(front == target) //If the current examining member is our target
return front; //Return it
for(i = 1; i <= adj[front].size() - 1 && adj[front].at(0) != 0; i++) { //While i is in bounds of the list which containes front's neighboors
Q.push( adj[front].at(i) ); //Push the neighboor with identity i
}
}
return -1;
}
int main(void) {
int node1, node2, edges, root, number_of_nodes = 0;
for(int i = 0; i <= MAX_NODES; i++)
adj[i].clear();
// Input
printf("Enter Number of Edges in graph: ");
scanf("%d", &edges);
//debug("%d", edges);
printf("Enter the connected notes numbers as identities. (eg. 1 2 is an edge conecting node 1 and node 2): ");
for(int i = 1; i <= edges; i++) {
scanf("%d %d", &node1, &node2);
adj[node1].push_back(node2);
//debug("%d %d", node1, adj[node1].at( adj[node1].size() - 1 ));
}
root = adj[1].at(0);
printf("Enter Node to find: ");
scanf("%d", &target);
debug("%d\n", bfs(adj[1].at(0)));
printf("%s", (bfs(root) != - 1) ? "Exists" : "Does not exist");
//printf("%d\n", bfs( adj[1].at(0) )); //Start from
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojdW5kZWYgREVCVUcKCgojaWZkZWYgREVCVUcKICAjZGVmaW5lIGRlYnVnKC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKQojZWxzZQogICNkZWZpbmUgZGVidWcoLi4uKSBkbyA7IHdoaWxlKDApCiNlbmRpZgoKCiNkZWZpbmUgTUFYX0VER0VTCTIwICsgMSAvL1dlIGFkZCBvbmUgc28gd2UgY2FuIHN0YXJ0IHN0b3JpbmcgZnJvbSB2ZWN0b3JbMV0gYW5kIG5vdCB2ZWN0b3JbMF0gZm9yIGVhc2luZWVzcwojZGVmaW5lIE1BWF9OT0RFUwk4MCArIDEKCiNkZWZpbmUgVU5WSVNJVEVECTAKI2RlZmluZSBWSVNJVEVECQkxCgp2ZWN0b3I8aW50PiAJYWRqW01BWF9OT0RFUyArIDFdOwpxdWV1ZTxpbnQ+IAlROwoKaW50IHRhcmdldDsKCmludCBiZnMoaW50IHNyYykKewogIGludCBmcm9udDsKICB1bnNpZ25lZCBpbnQgaTsKICAKICAvKiBXZSBzaG91bGQgbm90IHRyZWF0IHJvb3Qgc2VwZXJhdGVseSBleGNlcHQgd2hlbiB3ZSBwdXNoIGl0CiAgICogaWYoc3JjID09IHRhcmdldCkJCQkJCS8vSWYgc3JjIChhbmQgdGhpcyB0aW1lIHJvb3QpIGlzIG91ciB0YXJnZXQKICAgIHJldHVybiBzcmM7CQkJCQkJLy9UaGVuIHJldHVybiBpdAogICAgCiAgCiAgZm9yKGkgPSAxOyBpIDw9IGFkaltzcmNdLnNpemUoKTtpKyspCXsJCS8vV2hpbGUgaSBpcyBpbiBib3VuZHMgb2YgdGhlIHJvb3QncyBuZWlnaGJvb3IgbGlzdAogICAgICBRLnB1c2goIGFkaltzcmNdLmF0KGkpICk7CQkJCS8vUHVzaCByb290J3MgbmVpZ2hib29yIGkgaW4gdGhlIGxpc3QKICAgfQogICovCiAgUS5wdXNoKHNyYyk7CiAgCiAgd2hpbGUoIVEuZW1wdHkoKSkJewkJCQkvL1doaWxlIFEgaXMgbm90IGVtcHR5CiAgICAKICAgIGZyb250ID0gUS5mcm9udCgpOwkJCQkJLy9TdG9yZSB0aGUgZnJvbnQgbWVtYmVyIHRvIGJlIGV4YW1pbmVkCiAgICBRLnBvcCgpOwkJCQkJCS8vYW5kIHBvcCBpdAogICAgCiAgICBpZihmcm9udCA9PSB0YXJnZXQpCQkJCQkvL0lmIHRoZSBjdXJyZW50IGV4YW1pbmluZyBtZW1iZXIgaXMgb3VyIHRhcmdldAogICAgICByZXR1cm4gZnJvbnQ7CQkJCQkvL1JldHVybiBpdAogICAgCiAgICBmb3IoaSA9IDE7IGkgPD0gYWRqW2Zyb250XS5zaXplKCkgLSAxICYmIGFkaltmcm9udF0uYXQoMCkgIT0gMDsgaSsrKQl7CS8vV2hpbGUgaSBpcyBpbiBib3VuZHMgb2YgdGhlIGxpc3Qgd2hpY2ggY29udGFpbmVzIGZyb250J3MgbmVpZ2hib29ycwogICAgICBRLnB1c2goIGFkaltmcm9udF0uYXQoaSkgKTsJCQkvL1B1c2ggdGhlIG5laWdoYm9vciB3aXRoIGlkZW50aXR5IGkKICAgIH0KICB9CiAgIHJldHVybiAtMTsKfQoKCmludCBtYWluKHZvaWQpCXsKIGludCBub2RlMSwgbm9kZTIsIGVkZ2VzLCByb290LCBudW1iZXJfb2Zfbm9kZXMgPSAwOwogCiBmb3IoaW50IGkgPSAwOyBpIDw9IE1BWF9OT0RFUzsgaSsrKQogICAgYWRqW2ldLmNsZWFyKCk7CiAKIC8vIElucHV0CiAKIHByaW50ZigiRW50ZXIgTnVtYmVyIG9mIEVkZ2VzIGluIGdyYXBoOiAiKTsKIHNjYW5mKCIlZCIsICZlZGdlcyk7CiAvL2RlYnVnKCIlZCIsIGVkZ2VzKTsKIAogcHJpbnRmKCJFbnRlciB0aGUgY29ubmVjdGVkIG5vdGVzIG51bWJlcnMgYXMgaWRlbnRpdGllcy4gKGVnLiAxIDIgaXMgYW4gZWRnZSBjb25lY3Rpbmcgbm9kZSAxIGFuZCBub2RlIDIpOiAiKTsKIGZvcihpbnQgaSA9IDE7IGkgPD0gZWRnZXM7IGkrKykJewogICAKICBzY2FuZigiJWQgJWQiLCAmbm9kZTEsICZub2RlMik7CiAgYWRqW25vZGUxXS5wdXNoX2JhY2sobm9kZTIpOwogIC8vZGVidWcoIiVkICVkIiwgbm9kZTEsIGFkaltub2RlMV0uYXQoIGFkaltub2RlMV0uc2l6ZSgpIC0gMSApKTsKICAKIH0KIAogcm9vdCA9IGFkalsxXS5hdCgwKTsKIAogcHJpbnRmKCJFbnRlciBOb2RlIHRvIGZpbmQ6ICIpOwogCiBzY2FuZigiJWQiLCAmdGFyZ2V0KTsKIAogZGVidWcoIiVkXG4iLCBiZnMoYWRqWzFdLmF0KDApKSk7CiBwcmludGYoIiVzIiwgKGJmcyhyb290KSAhPSAtIDEpID8gIkV4aXN0cyIgOiAiRG9lcyBub3QgZXhpc3QiKTsKIC8vcHJpbnRmKCIlZFxuIiwgYmZzKCBhZGpbMV0uYXQoMCkgKSk7IC8vU3RhcnQgZnJvbSAKIAogcmV0dXJuIDA7Cn0K