#include<iostream>
#include<string>
#define MaxSize 10
using namespace std;
class Graph
{
private:
struct Edge
{
int end;//终点位置
struct Edge* next;
};
struct Vertex
{
string Infor;//信息
struct Edge* FirstNode;
};
struct Vertex v[MaxSize];//点
int VNum, ENum;
public:
Graph()
{
for (int i = 0; i < MaxSize; ++i)//初始化变量
{
v[i].FirstNode = NULL;
VNum = 0;
ENum = 0;
}
}
void InPut(string a[], int V, int E)
{
for (int i = 0; i < V; ++i)
v[i].Infor = a[i];
VNum = V, ENum = E;
int vi, vj;//边的位置
for (int i = 0; i < ENum; ++i)
{
cout << "输入第"<<i+1<<"对有关系的边" << endl;
struct Edge* e=new struct Edge;//边
cout << "分别输入始点位置,终点位置" << endl;
cin >> vi;
cin >> vj;
e->end = vj;
//头插法
e->next = v[vi].FirstNode;
v[vi].FirstNode = e;
}
}
void OutPut()
{
cout << "邻接表如下" << endl;
for (int i = 0; i < VNum; ++i)
{
struct Edge* p = v[i].FirstNode;
if (p)
{
cout << v[i].Infor << " 与 ";
for (; p; p = p->next)
{
cout << v[p->end].Infor;//输出邻接点信息
}
cout<< " 邻接 " << endl;
}
}
}
};
int main()
{
int VNum,ENum;
cout << "输入顶点个数" << endl;
cin >> VNum;
cout << "输入边的个数" << endl;
cin >> ENum;
cout << "输入信息符号" << endl;
string a[MaxSize];
for (int i = 0; i < VNum; ++i)
cin >> a[i];
Graph graph;
graph.InPut(a, VNum, ENum);
graph.OutPut();
}
C/C++有向图的邻接表
最新推荐文章于 2023-02-09 17:07:08 发布