首先给出矩阵的,代码如下:
#include<iostream>
#include<string>
using namespace std;
typedef char verTexType;
typedef bool edgeType;
#define maxVex 100
#define maxValue 65535
typedef struct {
int verNum, edgeNum;
verTexType V[maxVex];
edgeType E[maxVex][maxVex];//邻接矩阵
}Graph;
void createGraph(Graph *g, int a, int b) {
bool isValid(char, char, int);//声明
char v1, v2;
//初始化
//将顶点从A开始初始化
for (int i = 0;i < a;i++) {
g->V[i] = 'A' + i;
}
for (int i = 0;i < a;i++) {
for (int j = 0;j < a;j++) {
g->E[i][j] = false;
}
}
cout << "每次请输入两个大写字母:" << endl;
while (b--) {
cin >> v1 >> v2;
//无向图是对称的
g->E[v1 - 'A'][v2 - 'A'] = true;
g->E[v2 - 'A'][v1 - 'A'] = true;
}
}
void printGraph(Graph *g, int len) {
for (int i = 0;i < len;i++) {
for (int j = 0;j < len;j++) {
if (g->E[i][j]) {
printf("边:%c---%c\n", i + 'A', j + 'A');
//无向图是对称的,而相同的边只输入一次就可以了
//g->E[j][i] = false;
}
}
}
}
int main() {
int a, b;
cout << "请分别输入点数和边数:";
cin >> a >> b;
Graph g;
createGraph(&g, a, b);
printGraph(&g, a);
return 0;
}
下边是邻接表形式的
#include<iostream>
#include<string>
using namespace std;
#define maxVex 100
typedef char VertexType;
typedef int EdgeType;
typedef struct edgeNode {
int adjVex;//该顶点对应的下标
EdgeType weight;//权重
struct edgeNode *next;
}edgeNode;
typedef struct vertexNode {
VertexType data;//顶点信息(对应顶点的下标)
edgeNode *firstEdge;//边表头指针
}vertexNode,adjList[maxVex];
typedef struct{
adjList adjList;
int verNum, edgeNum;
}Graph;
void createGraph(Graph *g) {
int i, j, k;
edgeNode *e;//边
cout << "请输入顶点数和边数:";
cin >> g->verNum >> g->edgeNum;
//初始化
for (i = 0;i < g->verNum;i++) {
g->adjList[i].data = i;//顶点信息
g->adjList[i].firstEdge = NULL;
}
//建立边表
for (k = 0;k < g->edgeNum;k++) {
cout << "输入边(Vi,Vj)上的顶点序号:";
cin >> i >> j;
//无向图是对称的
e = (edgeNode *)malloc(sizeof(edgeNode));
e->adjVex = j;
e->next = g->adjList[i].firstEdge;
g->adjList[i].firstEdge = e;
e = (edgeNode *)malloc(sizeof(edgeNode));
e->adjVex = i;
e->next = g->adjList[j].firstEdge;
g->adjList[j].firstEdge = e;
}
}