您的位置:首页 > 编程语言 > C语言/C++

图的邻接表存储表示

2016-11-18 15:27 267 查看
#include <iostream>
using namespace std;
#define MAX_VERTEX
class ArcNode {
public:
int adjvex;
ArcNode *next;
ArcNode() :next(NULL),adjvex(-1) {}
};
class VNode {
public:
char data;
ArcNode *first;
VNode():first(new ArcNode()){}
};
class Map {
VNode *vertices;
int vexnum;
int arcnum;
public:
Map(int vnum, int anum) {
vexnum = vnum;
arcnum = anum;
vertices = new VNode[vexnum];
}
~Map() {
delete []vertices;
}
void CreateAdjList();
void Display();
};
void Map::CreateAdjList() {
for (int i = 0; i < vexnum; i++)
vertices[i].data = i + 'A';
char h, t;
for (int i = 0; i < arcnum; i++) {
cin >> h;
cin >> t;
ArcNode *p = vertices[h - 'A'].first;
while (p->next) {
p = p->next;
}
p->next = new ArcNode();
p->adjvex = t - 'A';
}
}
void Map::Display() {
for (int i = 0; i < vexnum; i++) {
ArcNode *p = vertices[i].first;
cout << i << ' ' << vertices[i].data<<'-';
if (!p) return;
while (p->next) {
cout << p->adjvex << '-';
p = p->next;
}
cout<<'^' << endl;
}
}
int main() {
int t;
cin >> t;
while (t--) {
int vnum, anum;
cin >> vnum >> anum;
Map map(vnum, anum);
map.CreateAdjList();
map.Display();
}
system("pause");
}
/**********输入
1
5 7
A B
A D
A E
B D
C B
C E
E D
***********/

/*********输出
0 A-1-3-4-^
1 B-3-^
2 C-1-4-^
3 D-^
4 E-3-^
************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 邻接表