假如不使用vertex和指针,使用二维数组如何完成?
时间: 2024-11-20 20:36:30 浏览: 7
如果不使用`Vertex`结构和指针,而是直接使用二维数组来表示邻接矩阵,并用另一个一维数组来跟踪访问状态,可以这样做:
首先,定义一个二维数组`adjMatrix[V][V]`来存储邻接矩阵,其中`V`代表顶点的数量。数组元素`adjMatrix[i][j]`等于1表示顶点`i`和`j`之间有边。
接下来,创建一个一维数组`visited[V]`来记录每个顶点是否已经被访问过。初始化时,将所有元素设为0,表示未访问。
这里是一个简化版的深度优先搜索实现:
```c
void dfs(int adjMatrix[V][V], int V, int current, int visited[V]) {
visited[current] = 1; // 标记当前顶点已访问
printf("%d ", current); // 输出当前顶点
// 检查当前顶点的所有邻居
for (int i = 0; i < V; i++) {
if (adjMatrix[current][i] && !visited[i]) { // 如果邻居未访问且存在边
dfs(adjMatrix, V, i, visited); // 递归访问邻居
}
}
}
// 主函数调用
void testConnectivity(int adjMatrix[V][V], int V) {
int visited[V] = {0}; // 初始化所有顶点为未访问
dfs(adjMatrix, V, 0, visited); // 从第一个顶点开始搜索
}
```
在这个版本中,`dfs`函数通过嵌套循环遍历邻接矩阵的每个元素,而不是使用邻接列表。每次遇到一个未访问的相邻顶点,就递归地调用`dfs`。
阅读全文