提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、题目
二、代码
#include<iostream>
using namespace std;
struct Node
{
int info;
char data;
Node* next;
};
class Graph
{
private:
Node* m;
int num;
public:
Graph(int n, int k);
void AdjancencyList();
};
Graph::Graph(int n, int k)
{
num = n;
m = new Node[n];
int i;
for (i = 0; i < n; i++)
{
cin >> m[i].data;
m[i].next = NULL;
}
char temp1;
char temp2;
int flag1;
int flag2;
Node* t;
Node* p;
for (i = 0; i < k; i++)
{
cin >> temp1 >> temp2;
for (int j = 0; j < n; j++)
{
if (m[j].data == temp1)
{
flag1 = j;
}
if (m[j].data == temp2)
{
flag2 = j;
}
}
if (m[flag1].next == NULL)
{
p = new Node;
p->info = flag2;
p->next = NULL;
m[flag1].next = p;
p = NULL;
}
else
{
t = m[flag1].next;
while (t->next != NULL)
{
t = t->next;
}
p = new Node;
p->info = flag2;
p->next = NULL;
t->next = p;
p = NULL;
}
}
}
void Graph::AdjancencyList()
{
Node* t;
for (int i = 0; i < num; i++)
{
cout << i << " ";
cout << m[i].data;
t = m[i].next;
while (t)
{
cout << "-" << t->info;
t = t->next;
}
cout << "-" << "^" << endl;
}
}
int main()
{
int t;
int n;
int k;
cin >> t;
while (t--)
{
cin >> n;//顶点
cin >> k;//弧
Graph temp(n, k);
temp.AdjancencyList();
}
return 0;
}
三、反思
创建了图这个对象,该对象包含两个私有变量以及两个公共函数。
a)私有变量中,一个是先创建的节点类数组,另一个是顶点的个数。
(先创建的节点类中,成员有编号info,节点内容data,以及next指针)
b)公共函数中,一个是带参数的构建图,另一个就是输出邻接表。
1) Graph(int n, int k)
先将个顶点赋值,并默认每个顶点的next为空。
接着构造各弧:先找出输入起点顶点和终点顶点的编号;
若起点顶点的next为空,则将终点顶点赋值给next指针。
若起点顶点的next节点大于等于一个,先找出最后一个,再将终点节点插于该节点之后。
2)void AdjancencyList();
先输出该点的编号,以及内容。再判断next是否为空进行下一步输出。