#include<iostream>
using namespace std;
const int MAX = 10;
struct edge_node
{
int adjvex;
int weight;
edge_node *next;
};
struct vertex_node
{
char vertex;
edge_node *first_edge;
};
class Graph
{
private:
vertex_node adjlist[MAX];
int vertex_num;
int edge_num;
public:
Graph();
int locate(char ch);
void print();
};
int Graph::locate(char ch)
{
int i = 0;
for (i = 0; i < this->vertex_num; i++)
{
if (this->adjlist[i].vertex == ch)
{
break;
}
}
return i;
}
void Graph::print()
{
int i = 0;
while (this->adjlist[i].first_edge != nullptr && i < this->vertex_num)
{
cout << "顶点:" << this->adjlist[i].vertex;
edge_node *s = nullptr;
s = this->adjlist[i].first_edge;
while (s != nullptr)
{
cout << "->"
<< "(" << s->adjvex
<< "," << s->weight << ")";
s = s->next;
}
i++;
cout << endl;
}
}
Graph::Graph()
{
int i = 0, j = 0, k = 0, w = 0;
cout << "请输入顶点数和边数:" << endl;
cin >> this->vertex_num >> this->edge_num;
cout << "请依次输入顶点:" << endl;
for (i = 0; i < this->vertex_num; i++)
{
cin >> this->adjlist[i].vertex;
this->adjlist[i].first_edge = nullptr;
}
cout << "请输入两个顶点及其权值:" << endl;
for (k = 0; k < this->edge_num; k++)
{
char first, second;
edge_node *s, *e = nullptr;
cin >> first >> second >> w;
i = this->locate(first);
j = this->locate(second);
s = new edge_node;
s->adjvex = j;
s->weight = w;
s->next = this->adjlist[i].first_edge;
this->adjlist[i].first_edge = s;
e = new edge_node;
e->adjvex = i;
e->weight = w;
e->next = this->adjlist[j].first_edge;
this->adjlist[j].first_edge = e;
}
}
int main()
{
Graph g;
g.print();
system("pause");
return 0;
}