#include <iostream>
#include <list>
using namespace std;
class Graph {
private:
int v;
list<int> *adj;
public:
Graph(int v) {
this->v = v;
adj =new list<int>[v];
}
void addEdge(int source, int dest) {
adj[source].push_back(dest);
}
void printGraph() {
for(int i=0;i<v;i++) {
list<int> l = adj[i];
list <int> :: iterator it;
for(it = l.begin(); it != l.end(); ++it)
cout << '\t' << *it;
cout << '\n';
}
}
void bfs(int s) {
bool *visited = new bool[v];
for(int i=0;i<v;i++)
visited[i] = false;
list<int> queue;
visited[s] = true;
queue.push_back(s);
list<int>::iterator i;
while(!queue.empty()) {
s = queue.front();
cout<<s<< " ";
queue.pop_front();
for(i = adj[s].begin();i!=adj[s].end();++i) {
if(!visited[*i]) {
visited[*i] = true;
queue.push_back(*i);
}
}
}
}
};
int main() {
Graph g(4);
g.addEdge(0, 1);
g.addEdge(0, 2);
g.addEdge(1, 2);
g.addEdge(2, 0);
g.addEdge(2, 3);
g.addEdge(3, 3);
//g.printGraph();
g.bfs(2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgR3JhcGggewpwcml2YXRlOgoJaW50IHY7CglsaXN0PGludD4gKmFkajsKcHVibGljOgoJR3JhcGgoaW50IHYpIHsKCQl0aGlzLT52ID0gdjsKCQlhZGogPW5ldyBsaXN0PGludD5bdl07Cgl9Cgl2b2lkIGFkZEVkZ2UoaW50IHNvdXJjZSwgaW50IGRlc3QpIHsKCQlhZGpbc291cmNlXS5wdXNoX2JhY2soZGVzdCk7Cgl9CgoJdm9pZCBwcmludEdyYXBoKCkgewoJCWZvcihpbnQgaT0wO2k8djtpKyspIHsKCQkJbGlzdDxpbnQ+IGwgPSBhZGpbaV07CgkJCWxpc3QgPGludD4gOjogaXRlcmF0b3IgaXQ7IAoJCSAgICBmb3IoaXQgPSBsLmJlZ2luKCk7IGl0ICE9IGwuZW5kKCk7ICsraXQpIAoJCSAgICAgICAgY291dCA8PCAnXHQnIDw8ICppdDsgCgkJICAgIGNvdXQgPDwgJ1xuJzsKCQl9Cgl9Cgl2b2lkIGJmcyhpbnQgcykgewoJCWJvb2wgKnZpc2l0ZWQgPSBuZXcgYm9vbFt2XTsKCQlmb3IoaW50IGk9MDtpPHY7aSsrKQoJCQl2aXNpdGVkW2ldID0gZmFsc2U7CgkJbGlzdDxpbnQ+IHF1ZXVlOwoJCXZpc2l0ZWRbc10gPSB0cnVlOwoJCXF1ZXVlLnB1c2hfYmFjayhzKTsKCQlsaXN0PGludD46Oml0ZXJhdG9yIGk7CgkJd2hpbGUoIXF1ZXVlLmVtcHR5KCkpIHsKCQkJcyA9IHF1ZXVlLmZyb250KCk7CgkJCWNvdXQ8PHM8PCAiICI7CgkJCXF1ZXVlLnBvcF9mcm9udCgpOwoJCQlmb3IoaSA9IGFkaltzXS5iZWdpbigpO2khPWFkaltzXS5lbmQoKTsrK2kpIHsKCQkJCWlmKCF2aXNpdGVkWyppXSkgewoJCQkJCXZpc2l0ZWRbKmldID0gdHJ1ZTsKCQkJCQlxdWV1ZS5wdXNoX2JhY2soKmkpOwoJCQkJfQoJCQl9CgkJfQoJfQp9OwppbnQgbWFpbigpIHsKCUdyYXBoIGcoNCk7CglnLmFkZEVkZ2UoMCwgMSk7IAogICAgZy5hZGRFZGdlKDAsIDIpOyAKICAgIGcuYWRkRWRnZSgxLCAyKTsgCiAgICBnLmFkZEVkZ2UoMiwgMCk7IAogICAgZy5hZGRFZGdlKDIsIDMpOyAKICAgIGcuYWRkRWRnZSgzLCAzKTsKICAgIC8vZy5wcmludEdyYXBoKCk7CiAgICBnLmJmcygyKTsKCXJldHVybiAwOwp9