#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<vector>
using namespace std;
struct elem
{
int dest; // this the the node number(name) with which our source is connected.
struct elem *next;
};
int addEdge(vector<elem *> &graph,int src,int dest)
{
struct elem *temp=(struct elem *)malloc(sizeof(struct elem));
temp->dest=dest;
temp->next=graph[src];
graph[src]=temp;
temp=(struct elem *)malloc(sizeof(struct elem));
temp->dest=src;
temp->next=graph[dest];
graph[dest]=temp;
return 0;
}
void print(int v,vector<elem *> &graph)
{
int i;
struct elem *temp;
for(i=0;i<v;i++)
{
temp=graph[i];
printf("node %d ",i);
while(temp!=NULL)
{
printf(" -> %d",temp->dest);
temp=temp->next;
}
printf("\n");
}
}
int main()
{
int v=5,i;
vector<elem *> graph;
for(i=0;i<v;i++)
graph.push_back(NULL);
addEdge(graph, 0, 1);
addEdge(graph, 0, 4);
addEdge(graph, 1, 2);
addEdge(graph, 1, 3);
addEdge(graph, 1, 4);
addEdge(graph, 2, 3);
addEdge(graph, 3, 4);
print(v,graph);
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0ZGlvLmg+CiNpbmNsdWRlPHN0ZGxpYi5oPgojaW5jbHVkZTx2ZWN0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGVsZW0KewogICAgaW50IGRlc3Q7ICAgICAgICAgICAgIC8vIHRoaXMgdGhlIHRoZSBub2RlIG51bWJlcihuYW1lKSB3aXRoIHdoaWNoIG91ciBzb3VyY2UgaXMgY29ubmVjdGVkLgogICAgc3RydWN0IGVsZW0gKm5leHQ7Cgp9OwoKaW50IGFkZEVkZ2UodmVjdG9yPGVsZW0gKj4gJmdyYXBoLGludCBzcmMsaW50IGRlc3QpCnsKICAgIHN0cnVjdCBlbGVtICp0ZW1wPShzdHJ1Y3QgZWxlbSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGVsZW0pKTsKICAgIHRlbXAtPmRlc3Q9ZGVzdDsKICAgIHRlbXAtPm5leHQ9Z3JhcGhbc3JjXTsKICAgIGdyYXBoW3NyY109dGVtcDsKICAgIHRlbXA9KHN0cnVjdCBlbGVtICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgZWxlbSkpOwogICAgdGVtcC0+ZGVzdD1zcmM7CiAgICB0ZW1wLT5uZXh0PWdyYXBoW2Rlc3RdOwogICAgZ3JhcGhbZGVzdF09dGVtcDsKICAgIHJldHVybiAwOwp9Cgp2b2lkIHByaW50KGludCB2LHZlY3RvcjxlbGVtICo+ICZncmFwaCkKewogICAgaW50IGk7CiAgICBzdHJ1Y3QgZWxlbSAqdGVtcDsKICAgIGZvcihpPTA7aTx2O2krKykKICAgIHsKICAgICAgICB0ZW1wPWdyYXBoW2ldOwogICAgICAgIHByaW50Zigibm9kZSAlZCAiLGkpOwogICAgICAgIHdoaWxlKHRlbXAhPU5VTEwpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIiAtPiAlZCIsdGVtcC0+ZGVzdCk7CiAgICAgICAgICAgIHRlbXA9dGVtcC0+bmV4dDsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGludCB2PTUsaTsKICAgIHZlY3RvcjxlbGVtICo+IGdyYXBoOwogICAgZm9yKGk9MDtpPHY7aSsrKQogICAgICAgIGdyYXBoLnB1c2hfYmFjayhOVUxMKTsKCiAgICBhZGRFZGdlKGdyYXBoLCAwLCAxKTsKICAgIGFkZEVkZ2UoZ3JhcGgsIDAsIDQpOwogICAgYWRkRWRnZShncmFwaCwgMSwgMik7CiAgICBhZGRFZGdlKGdyYXBoLCAxLCAzKTsKICAgIGFkZEVkZ2UoZ3JhcGgsIDEsIDQpOwogICAgYWRkRWRnZShncmFwaCwgMiwgMyk7CiAgICBhZGRFZGdlKGdyYXBoLCAzLCA0KTsKICAgIHByaW50KHYsZ3JhcGgpOwogICAgcmV0dXJuIDA7Cn0K