对于无向图的邻接矩阵和邻接表的存储方法,请思考下列图的操作函数的实现方法和算法时间复杂度:(下列函数中G表示图的邻接矩阵或邻接表,v为顶点序号,wArray参数为数组,使用引用方式传递到all_adj函数中,用于保存函数返回的v的所有邻接点。)(1)求顶点的第一个邻接顶点first_adj(G,v),返回值为第一个邻接顶点的序号(2)求某个顶点的所有邻接点all_adj(G,v,wArray),返回值为所有顶点的个数;要求:用文字或伪代码描述两个函数分别在两种存储结构的实现并写出实现对应的时间复杂度。
时间: 2024-02-09 17:09:23 浏览: 62
1. 在邻接矩阵存储结构下,求顶点的第一个邻接顶点的函数实现如下:
```
int first_adj(MatrixGraph G, int v){
for(int j=0; j<G.n; j++){
if(G.edges[v][j] != 0){
return j;
}
}
return -1; //没有邻接点
}
```
时间复杂度为 $O(n)$。
在邻接表存储结构下,求顶点的第一个邻接顶点的函数实现如下:
```
int first_adj(ListGraph G, int v){
if(G.adjList[v].next != NULL){
return G.adjList[v].next->vertex;
}
return -1; //没有邻接点
}
```
时间复杂度为 $O(1)$。
2. 在邻接矩阵存储结构下,求某个顶点的所有邻接点的函数实现如下:
```
int all_adj(MatrixGraph G, int v, int wArray[]){
int count = 0;
for(int j=0; j<G.n; j++){
if(G.edges[v][j] != 0){
wArray[count++] = j;
}
}
return count;
}
```
时间复杂度为 $O(n)$。
在邻接表存储结构下,求某个顶点的所有邻接点的函数实现如下:
```
int all_adj(ListGraph G, int v, int wArray[]){
int count = 0;
EdgeNode* p = G.adjList[v].next;
while(p != NULL){
wArray[count++] = p->vertex;
p = p->next;
}
return count;
}
```
时间复杂度为 $O(k)$,其中 $k$ 为顶点 $v$ 的邻接点个数。
阅读全文