试在邻接矩阵存储结构上实现图的基本操作:InsertVex(G,v),InsertArc (G,v,w), DeleteVex(G ,v)和DeleteArc(G,v,w)。
时间: 2023-10-03 17:11:02 浏览: 475
实验十二 图的基本操作—邻接矩阵存储结构.doc
好的,我可以为你解答。在邻接矩阵存储结构上实现图的基本操作如下:
1. InsertVex(G,v): 将新顶点v添加到图G中,需要增加邻接矩阵的行和列。
```
// 邻接矩阵存储结构的图定义
#define MAX_VERTEX_NUM 20
typedef struct {
char vexs[MAX_VERTEX_NUM]; // 顶点表
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vexnum, arcnum; // 图中当前的顶点数和边数
} MGraph;
// 插入新顶点
void InsertVex(MGraph *G, char v)
{
if (G->vexnum >= MAX_VERTEX_NUM) {
printf("Error: Vertex number exceeds the maximum limit.\n");
return;
}
G->vexs[G->vexnum] = v; // 添加新的顶点
G->vexnum++; // 顶点数加1
int i;
for (i = 0; i < G->vexnum; i++) {
G->arcs[i][G->vexnum - 1] = 0; // 新顶点到其他顶点的边初始为0
G->arcs[G->vexnum - 1][i] = 0; // 其他顶点到新顶点的边初始为0
}
}
```
2. InsertArc(G,v,w): 在图G中添加一条从v到w的边。
```
// 添加边
void InsertArc(MGraph *G, char v, char w)
{
int i = LocateVex(G, v);
int j = LocateVex(G, w);
if (i == -1 || j == -1) {
printf("Error: Vertex not found.\n");
return;
}
G->arcs[i][j] = 1; // 添加边
G->arcnum++; // 边数加1
}
```
3. DeleteVex(G,v): 删除图G中的顶点v,需要删除邻接矩阵中对应的行和列。
```
// 删除顶点
void DeleteVex(MGraph *G, char v)
{
int i = LocateVex(G, v);
if (i == -1) {
printf("Error: Vertex not found.\n");
return;
}
int j;
for (j = 0; j < G->vexnum; j++) {
if (G->arcs[i][j] == 1) { // 删除与该顶点相邻的边
G->arcs[i][j] = 0;
G->arcnum--;
}
if (G->arcs[j][i] == 1) { // 删除与该顶点相邻的边
G->arcs[j][i] = 0;
G->arcnum--;
}
}
for (j = i; j < G->vexnum - 1; j++) { // 删除该顶点
G->vexs[j] = G->vexs[j + 1];
}
G->vexnum--;
for (j = i; j < G->vexnum; j++) { // 删除邻接矩阵中对应的行和列
int k;
for (k = 0; k < G->vexnum; k++) {
G->arcs[j][k] = G->arcs[j + 1][k];
}
}
for (j = i; j < G->vexnum; j++) {
int k;
for (k = 0; k < G->vexnum; k++) {
G->arcs[k][j] = G->arcs[k][j + 1];
}
}
}
```
4. DeleteArc(G,v,w): 删除图G中从v到w的边。
```
// 删除边
void DeleteArc(MGraph *G, char v, char w)
{
int i = LocateVex(G, v);
int j = LocateVex(G, w);
if (i == -1 || j == -1) {
printf("Error: Vertex not found.\n");
return;
}
if (G->arcs[i][j] == 0) { // 边不存在
printf("Error: Arc not found.\n");
return;
}
G->arcs[i][j] = 0; // 删除边
G->arcnum--; // 边数减1
}
```
以上代码是在邻接矩阵存储结构上实现图的基本操作的示例,仅供参考。
阅读全文