//返回v的第一个邻接点所对应的下标 //如果v没有邻接点,返回-1 int FirstAdjVex(Graph G , int v){ /*------------代码开始--------------*/ //依次在领接矩阵中搜索顶点v所在行中的元素 //如果有值为1的元素,同时访问状态为False,即找到对应的邻接点,返回所在下标 /*------------代码结束--------------*/ } //返回v相对于w的下一个邻接点的下标,即从w之后的顶点开始搜索 //如果没有,返回-1 int NextAdjVex(Graph G , int v , int w){ /*------------代码开始--------------*/ /*------------代码结束--------------*/ } //从第v个顶点出发,深度优先遍历无向连通图G void DFS(Graph G, int v){ //访问第v个顶点,并置访问标志数组相应分量值为true //依次检查v的所有邻接点w,如果w未被访问,从w出发进行DFS遍历 /*------------代码开始--------------*/ /*------------代码结束--------------*/ } //对无向图G做深度优先遍历 void DFSTraverse(Graph G){ //访问标志数组初始化 //从第1个未被访问的顶点出发深度优先遍历图G //如果图G中还有未被访问的结点,重复这一过程,直到图G中所有顶点都被访问为止 /*------------代码开始--------------*/ /*------------代码结束--------------*/ }
时间: 2023-06-27 07:04:41 浏览: 261
图的基本运算
5星 · 资源好评率100%
int FirstAdjVex(Graph G, int v) {
int i;
for (i = 0; i < G.vexnum; i++) {
if (G.arcs[v][i] == 1 && G.visited[i] == false) {
return i;
}
}
return -1;
}
int NextAdjVex(Graph G, int v, int w) {
int i;
for (i = w + 1; i < G.vexnum; i++) {
if (G.arcs[v][i] == 1 && G.visited[i] == false) {
return i;
}
}
return -1;
}
void DFS(Graph G, int v) {
G.visited[v] = true;
printf("%c ", G.vexs[v]);
int w = FirstAdjVex(G, v);
while (w != -1) {
if (G.visited[w] == false) {
DFS(G, w);
}
w = NextAdjVex(G, v, w);
}
}
void DFSTraverse(Graph G) {
int i;
for (i = 0; i < G.vexnum; i++) {
G.visited[i] = false;
}
for (i = 0; i < G.vexnum; i++) {
if (G.visited[i] == false) {
DFS(G, i);
}
}
}
阅读全文