#include<iostream>
using namespace std;
typedef int TElemType;
typedef struct Node
{
TElemType Data;
int Tail_Vex;
int Head_Vex;
Node * tlink;
Node * hlink;
};
typedef struct Head_Node
{
string Name;
Node * First_In;
Node * First_Out;
};
typedef struct Graph
{
int Vex_num, Edge_num;
Head_Node * arr;
};
int Get_Location(Graph T,string name)
{
for(int i = 1; i <= T.Vex_num; i++)
{
if(T.arr[i].Name == name)
return i;
}
return -1;
}
void Create_Graph(Graph & T)
{
cin>>T.Vex_num>>T.Edge_num;
T.arr = new Head_Node[T.Vex_num + 1];
for(int i = 1; i <= T.Vex_num; i++)
{
cin>>T.arr[i].Name;
T.arr[i].First_In = nullptr;
T.arr[i].First_Out = nullptr;
}
int x, y;string n1, n2;
for(int i = 1; i <= T.Edge_num; i++)
{
cin>>n1>>n2;
x = Get_Location(T,n1);
y = Get_Location(T,n2);
Node * s = new Node;
s->Tail_Vex = x;s->Head_Vex = y;
s->tlink = T.arr[x].First_Out;
T.arr[x].First_Out = s;
s->hlink = T.arr[y].First_In;
T.arr[y].First_In = s;
}
cout<<"create finish"<<endl;
}
int * Degree(Graph T,string name)
{
int index = Get_Location(T,name);
Node * s = T.arr[index].First_In;
int in_num = 0, out_num = 0;
while(s != nullptr)
{
in_num++;
s = s->hlink;
}
s = T.arr[index].First_Out;
while(s != nullptr)
{
out_num++;
s = s->tlink;
}
int * arr = new int[2];
arr[0] = in_num;arr[1] = out_num;
return arr;
}
void Add_Degree(Graph &T, string name1, string name2,int data = 1)
{
int x = Get_Location(T,name1);
int y = Get_Location(T,name2);
Node * s = new Node;
s->Head_Vex = y;s->Tail_Vex = x;
s->hlink = T.arr[y].First_In;
T.arr[y].First_In = s;
s->tlink = T.arr[x].First_Out;
T.arr[x].First_Out = s;
T.Edge_num++;
}
int main()
{
Graph T;
int * arr;
Create_Graph(T);
cout<<"结点\t"<<"入度\t"<<"出度"<<endl;
for(int i = 1; i <= T.Vex_num; i++)
{
arr = Degree(T,T.arr[i].Name);
cout<<T.arr[i].Name<<"\t"<<arr[0]<<"\t"<<arr[1]<<endl;
}
Add_Degree(T,T.arr[1].Name,T.arr[4].Name);Add_Degree(T,T.arr[2].Name,T.arr[4].Name);
cout<<"结点\t"<<"入度\t"<<"出度"<<endl;
for(int i = 1; i <= T.Vex_num; i++)
{
arr = Degree(T,T.arr[i].Name);
cout<<T.arr[i].Name<<"\t"<<arr[0]<<"\t"<<arr[1]<<endl;
}
}
/*
4 7
v1 v2 v3 v4
v1 v2
v1 v3
v3 v1
v3 v4
v4 v3
v4 v1
v4 v2
*/
十字链表
最新推荐文章于 2022-09-22 12:47:36 发布