Sie sind auf Seite 1von 17

#include <iostream>

#include <string>
#include <list.h>
using namespace std;
enum hobbies
{
art=1,entertainment=2,tech=4,sports=5,music=3
};
enum group
{
justmusic,justart,justsports,justentertainment,justtech
};
class User
{
private:
string user_name;
int user_age;
int user_birth_year;
int user_birth_date;
int user_birth_month;

public:
hobbies user_hobbies;
string user_institute;
int user_year_joining;
group user_group;
int user_id;

User& operator= (const User &cuser);


int operator==(const User &cuser) const;
int operator<(const User &cuser) const;
User(const User &cuser);
User(string n,int ag,int yr,int dt,int m,hobbies hb,string ins,int jon);
User();
void print_name_id(void)
{
cout<<" Name:";
cout<<user_name<<endl;
cout<<" Id:";
cout<<user_id<<endl;
}
void print_name(void)
{
cout<<user_name;
}

};
User::User()
{
user_name="new_user";
user_institute="user_ins";
user_age = 0;
user_birth_year = 0;
user_birth_date = 0;
user_birth_month=0;
user_hobbies = art;
user_year_joining = 0;
user_id=0;
user_group=justmusic;
}
User::User(string n,int ag,int yr,int dt,int m,hobbies hb,string ins,int jon)
{
user_name=n;
user_age = ag;
user_birth_year = yr;
user_birth_date = dt;
user_birth_month=m;
user_hobbies = hb;
user_institute=ins;
user_year_joining = jon;
user_id=user_birth_year+user_birth_date*5+user_birth_month*3+6;
switch(user_hobbies)
{
case 1:
user_group=justart;
break;
case 2:
user_group=justentertainment;
break;
case 3:
user_group=justmusic;
break;
case 4:
user_group=justtech;
break;
case 5:
user_group=justsports;
break;
}
}
// Copy constructor
User::User(const User &cuser)
{
user_age = cuser.user_age;
user_name=cuser.user_name;
user_birth_year = cuser.user_birth_year;
user_birth_date = cuser.user_birth_date ;
user_birth_month=cuser.user_birth_month;
user_hobbies = cuser. user_hobbies;
user_institute=cuser.user_institute;
user_year_joining = cuser.user_year_joining;
user_id=cuser.user_id;
user_group=cuser.user_group;
}
User& User::operator= (const User &cuser)
{
user_age = cuser.user_age;
user_name=cuser.user_name;
user_birth_year = cuser.user_birth_year;
user_birth_date = cuser.user_birth_date ;
user_birth_month=cuser.user_birth_month;
user_hobbies = cuser. user_hobbies;
user_institute=cuser.user_institute;
user_year_joining = cuser.user_year_joining;
user_id=cuser.user_id;
user_group=cuser.user_group;
return *this;
}
int User::operator==(const User &cuser) const
{
if( this->user_id != cuser.user_id) return 0;
return 1;
}
int User::operator<(const User &cuser) const
{
if( this->user_id < cuser.user_id ) return 0;
return 1;
}
User create_user(void)
{
int i;
string name;
int age;
int birth_year;
int birth_date;
int birth_month;
hobbies hobbie;
string institute;
int year_joining;
group group;
cout<<"Enter Name :";
cin>>name;
cout<<"Enter age :";
cin>>age;
cout<<"Enter Birth Year :";
cin>>birth_year;
cout<<"Enter Birth Month :";
cin>>birth_month;
cout<<"Enter Birth Date :";
cin>>birth_date;
cout<<"Enter Institute Name :";
cin>>institute;
cout<<"Enter the year you joined the institute :";
cin>>year_joining;
cout<<"\nEnter Hobbie Choice\n";
cout<<"1.Art\n";
cout<<"2.Entertainment\n";
cout<<"3.Music\n";
cout<<"4.Tech\n";
cout<<"5.Sports\n";
cout<<"\nChoice :";
cin>>i;
switch(i)
{
case 1:
hobbie=art;
group=justart;
break;
case 2:
hobbie=entertainment;
group=justentertainment;
break;
case 3:
hobbie=music;
group=justmusic;
break;
case 4:
hobbie=tech;
group=justtech;
break;
case 5:
hobbie=sports;
group=justsports;
break;
}
User u(name,age,birth_year,birth_date,birth_month,hobbie,institute,year_jo
ining);
return u;
}
class p_queue
{
private:
struct nt{
int priority;
int data;
struct nt *next;
};
struct nt *hdr;
public:
p_queue()
{
hdr=0;
}
~p_queue()
{
struct nt *n,*nn;
n=hdr;
while(n)
{
nn=n->next;
delete n;
n=nn;
}
hdr=0;
}
void display()
{
struct nt *s;
s=hdr;
while(s!=0)
{
cout<<s->data<<" ";
s=s->next;
}
}
void insert(int x,int pr)
{
struct nt *p,*s,*prev;
p=new struct nt;
p->data=x;
p->next=0;
p->priority=pr;
if(hdr==0)
{
hdr=p;
return;
}
s=hdr;prev=0;
if(pr<s->priority)
{
p->next=s;
hdr=p;
return;
}
while((s!=0)&&(pr>s->priority))
{
prev=s;
s=s->next;
}
if(prev==0)
{
p->next=s;
hdr=p;
return;
}
prev->next=p;
p->next=s;
}
int delet()
{
struct nt *s;int x;
if(hdr==0)
{
return 0;
}
s=hdr;
x=s->data;
hdr=s->next;
delete s;
return x;
}
int firstcost()
{
struct nt *s;int x;
if(hdr==0)
{
return 0;
}
s=hdr;
x=hdr->priority;
return x;
}
int empty()
{
if(hdr==0)
return 1;
else
return 0;
}
int belongs(int x)
{
struct nt *s;
s=hdr;
while(s)
{
if(s->data==x)
return 1;
s=s->next;
}
return 0;
}
int findcost(int x)
{
struct nt *s;
s=hdr;
while(s)
{
if(s->data==x)
return s->priority;
s=s->next;
}
return 0;
}
void update(int x,int c)
{
struct nt *s,*prev;
s=hdr;
if(s->data==x)
{
s->priority=c;
return;
}
while(s)
{
if(s->data==x)
break;
prev=s;
s=s->next;
}
prev->next=s->next;
delete s;
insert(x,c);
}
};
typedef struct hr
{
int user_friend;
struct hr *next;
User user_f;
}horizontal_node;
typedef struct vr
{
int user;
horizontal_node*right;
struct vr *down;
User user_n;
}vertical_node;
class adjacency_list
{
private:
vertical_node *adj_list;
public:
adjacency_list()
{
adj_list=0;
}
~adjacency_list()
{
vertical_node *n,*p;
if(adj_list==0)
return;
n=adj_list;
while(n!=0)
{
p=n->down;
delete n;
n=p;
}
adj_list=0;
}
void add_user(User u)
{
vertical_node *p;
p=new vertical_node;
p->user_n=u;
p->down=0;
p->right=0;
p->user=u.user_id;
vertical_node *temp;
temp=adj_list;
if (temp==0)
{
adj_list=p;
return ;
}
while(temp!=0) //check if v is present already
{
if(u.user_id==(temp->user))
break;
temp=temp->down;
}
if((temp!=0) && u.user_id==(temp->user))
{
cout<<"User Present";
return ;
}
temp=adj_list; //if v is not present
while((temp!=0) && (temp->down!=0))
{
temp=temp->down;
}
temp->down=p;
return ;
}
void add_friend(int s,int r)
{
horizontal_node*q,*w;
vertical_node *temp,*temp1,*temp2;

if(s==r)
{
cout<<"User cannot be friend of himself\n";
return;
}
temp=adj_list;
while(temp!=0) //check if x not present
{
if((temp->user)==s)
break;
temp=temp->down;
}
if(temp==0)
{
cout<<"Node X is not present\n";
return;
}
temp1=temp;
temp=adj_list;
while(temp!=0) //check if y not present
{
if((temp->user)==r)
break;
temp=temp->down;
} //reache
d y
if(temp==0)
{
cout<<"Node Y is not present\n";
return;
}
temp2=temp;
w=temp->right; //friends of y
while(w!=0) //check if y--x present
{
if(w->user_friend==temp1->user_n.user_id)
break;
w=w->next;
}
if((w!=0)&&(w->user_friend==temp1->user_n.user_id))
{
cout<<"They are already friends\n";
return;
}
else
{
q=new horizontal_node;
q->user_friend=temp1->user_n.user_id;
q->user_f=temp1->user_n;
q->next=temp->right;
temp->right=q;
}
temp=adj_list;
while(temp!=0) //go to x vertex
{
if(temp->user==temp1->user_n.user_id)
break;
temp=temp->down;
}
w=temp->right; //check if x--y present
while(w!=0)
{
if(w->user_friend==temp2->user_n.user_id)
break;
w=w->next;
}
if((w!=0)&&(w->user_friend==temp2->user_n.user_id))
{
return;
}
else //add the edge
{
q=new horizontal_node;
q->user_friend=temp2->user_n.user_id;
q->user_f=temp2->user_n;
q->next=temp->right;
temp->right=q;
}
}
void del_friend(int s,int r)
{
vertical_node *temp,*temp1,*temp2;
if(s==r) //check x=y
return;
temp=adj_list;
while(temp!=0) //check if x not present
{
if(temp->user==s)
break;
temp=temp->down;
}
if(temp==0)
{
cout<<"First User not present";
return;
}
temp1=temp;
temp=adj_list; //check if y not present
while(temp!=0)
{
if(temp->user==r)
break;
temp=temp->down;
}
if(temp==0)
{
cout<<"Second User not present";
return;
}
else
{
temp2=temp;
horizontal_node *n,*prev;
n=temp->right;
prev=0;
while(n)
{
if(n->user_friend==s)
{
if(prev==0)
{
temp->right=n->next;
delete n;
return;
}
prev->next=n->next;
delete n;
return;
}
prev=n;
n=n->next;
}
}
temp=adj_list;
while(temp!=0)
{
if(temp->user==s)
break;
temp=temp->down;
}
horizontal_node *n,*prev;
n=temp->right;
prev=0;
while(n)
{
if(n->user_friend==r)
{
if(prev==0)
{
temp->right=n->next;
delete n;
return;
}
prev->next=n->next;
delete n;
return;
}
prev=n;
n=n->next;
}
}
void delete_friend(int x,int y)
{
del_friend(x,y);
del_friend(y,x);
}
void get_group_members(int a)
{
vertical_node *t;
switch(a)
{
case 1:

t=adj_list;
while(t!=0)
{
if(t->user_n.user_hobbies==art)
{
t->user_n.print_name();
}t=t->down;
}
break;
case 2:
t=adj_list;
while(t!=0)
{
if(t->user_n.user_hobbies==entertainment)
{
t->user_n.print_name();
}t=t->down;
}
break;
case 3:
t=adj_list;
while(t!=0)
{
if(t->user_n.user_hobbies==music)
{
t->user_n.print_name();
}t=t->down;
}
break;
case 4:
t=adj_list;
while(t!=0)
{
if(t->user_n.user_hobbies==tech)
{
t->user_n.print_name();
}t=t->down;
}
break;
case 5:
t=adj_list;
while(t!=0)
{
if(t->user_n.user_hobbies==sports)
{
t->user_n.print_name();
}t=t->down;
}
break;
}
}
void dijkstra(int s,int b)
{
vertical_node *temp,*z;
int v=0;
temp=adj_list;
while(temp!=0)
{
v=v+1;
temp=temp->down;
}
p_queue pq;int parent[v+1];
int c;
if(s==0) return;
z=adj_list;
while(z!=0)
{
if(z->user==s)
break;
z=z->down;
}
if(z==0) return;
cout<<endl<<"Dijkstra array representing shortest path"<<endl;
for(int k=0;k<v+1;k++)
{
parent[k]=99;
}
temp=adj_list;
while(temp!=0)
{
if(temp->user!=0)
pq.insert(temp->user,99);
temp=temp->down;
}
pq.update(s,0);
parent[s]=-1;
while(!pq.empty())
{
int d=pq.firstcost();
int x=pq.delet();
horizontal_node *n=get_right(x);
while(n!=0)
{
c=d;
if(pq.belongs(n->user_friend)&&(c<pq.findcost(n->user_friend)))
{
pq.update(n->user_friend,c);
parent[n->user_friend]=x;
}
n=n->next;
}
}
for(int j=0;j<v+1;j++)
{
if(parent[j]!=99)
{
if(parent[j]==-1)
{
cout<<endl<<"Root Vertex: "<<j;
}
else
{
cout<<endl<<"parent: "<<parent[j]<<" child: "<<j;
}
}
}
cout<<endl;cout<<"The Shortest Path\n";
cout<<b;
int vv,cc;
vv=b;
while(cc!=s)
{
cc=parent[vv];
vv=cc;
cout<<"<--"<<vv;
}
}
void print_user_name(int a)
{
vertical_node *t;
t=adj_list;
while(t!=0)
{
if(t->user_n.user_id==a)
{
t->user_n.print_name();
}t=t->down;
}
}
horizontal_node *get_right(int v)
{
vertical_node *temp;
temp=adj_list;
while(temp!=0)
{
if(temp->user==v)
return temp->right;
temp=temp->down;
}
}
void get_class_mates(int a)
{
vertical_node *t,*s;
t=adj_list;
while(t!=0)
{
if(t->user_n.user_id==a)
break;
t=t->down;
}
if(t==0)
{
cout<<"User Not Present";
}
s=adj_list;
cout<<"Current Classmate:";
while(s!=0)
{
if(s->user_n.user_institute==t->user_n.user_institute)
{
s->user_n.print_name();
cout<<endl;
}
}
}
void delete_user(int a)
{
vertical_node *temp,*temp1;
temp=adj_list;
while(temp!=0)
{
if(temp->user_n.user_id==a)
break;
temp=temp->down;
}
if (temp==0)
{
cout<<"User Not Present";
return;
}
temp1=adj_list;
while(temp1!=0)
{
delete_friend(a,temp1->user_n.user_id);
temp1=temp1->down;
}
if(temp==adj_list)
{
adj_list=adj_list->down;
delete temp;
return;
}
else
{
temp1=adj_list;
while(temp1!=0)
{
if(temp1->down->user_n.user_id==a)
break;
temp1=temp1->down;
}
temp1->down=temp->down;
delete temp;
return;
}
}

void show_all()
{
vertical_node *temp;
cout<<"-------------------SOCIAL-NETWORK-------------------\n";
temp=adj_list;
while(temp!=0)
{
horizontal_node *p;
cout<<"User->"<<endl;
temp->user_n.print_name_id();
p=temp->right;
if(p!=0)
{
cout<<"Friends with->"<<endl;
}
while(p!=0)
{
p->user_f.print_name();
p=p->next;
cout<<endl;
}
temp=temp->down;
cout<<endl;
}
cout<<"----------------------------------------------------";
}

};
int main()
{
adjacency_list p;
int i,k;
User user1,user2,temp;
cout<<"--------------------MENU---------------------";
cout<<"\nWhat do you want to do?\n";
cout<<"1.Add User\n";
cout<<"2.Add Friend\n";
cout<<"3.Delete Friend\n";
cout<<"4.Get Classmates of User\n";
cout<<"5.Find Group Members According To thier Intrests\n";
cout<<"6.Connection between two users A & B\n";
cout<<"7.Display Graph\n";
cout<<"8.Delete User\n";
cout<<"0.Exit the program\n";
cout<<"YOUR CHOICE: ";
cin>>i;
int u,u1,u2;
while(i)
{
switch(i)
{
case 1:
system("cls");
user1=create_user();
cout<<endl;
p.add_user(user1);
p.show_all();
break;
case 2:
system("cls");
cout<<"\nEnter user id 1: ";
cin>>u1;cout<<endl;
cout<<"\nEnter user id 2: ";
cin>>u2;cout<<endl;
p.add_friend(u1,u2);
p.show_all();
break;
case 3:
system("cls");
cout<<"\nEnter user id 1:";
cin>>u1;cout<<endl;
cout<<"\nEnter user id 2:";
cin>>u2;cout<<endl;
p.delete_friend(u1,u2);
p.show_all();
break;
case 4:
system("cls");
cout<<"Enter the User Id:";
cin>>k;
cout<<endl;
p.get_class_mates(k);

break;
case 6:
system("cls");
cout<<"\nEnter user id 1:";
cin>>u1;cout<<endl;
cout<<"\nEnter user id 2:";
cin>>u2;cout<<endl;
p.dijkstra(u1,u2);
break;
case 5:
cout<<"\nEnter Hobbie Choice\n";
cout<<"1.Art\n";
cout<<"2.Entertainment\n";
cout<<"3.Music\n";
cout<<"4.Tech\n";
cout<<"5.Sports\n";
cout<<"\nChoice :";
cin>>k;
p.get_group_members(k);
break;
case 7:
p.show_all();
break;
case 8:
system("cls");
cout<<"Enter The User Id:";
cin>>k;
cout<<endl;
p.delete_user(k);
p.show_all();
break;
default:
p.show_all();
}
cout<<"\nWhat do you want to do?\n";
cout<<"1.Add User\n";
cout<<"2.Add Friend\n";
cout<<"3.Delete Friend\n";
cout<<"4.Get Classmates of User\n";
cout<<"5.Find Group Members According To thier Intrests\n";
cout<<"6.Connection between two users A & B\n";
cout<<"7.Display Graph\n";
cout<<"8.Delete User\n";
cout<<"0.Exit the program\n";
cout<<"YOUR CHOICE: ";
cin>>i;
}
return(1);
}

Das könnte Ihnen auch gefallen