首页 >> 大全

图之深搜与广搜

2023-06-17 大全 63 作者:考证青年

邻接矩阵的定义:

#define MAXVEX 100
typedef char VertexType;
typedef int EdgeType;
struct GraphStruct;
typedef struct GraphStruct *Graph;
struct GraphStruct{VertexType vexs[MAXVEX]; /*顶点,下标从0开始*/EdgeType edge[MAXVEX][MAXVEX]; /*邻接矩阵*/int vertexNum,edgeNum;
};

邻接表的定义:

#define MAXVEX 100 /*最大顶点数*/
typedef char VertexType;
struct GraphStruct;
typedef struct GraphStruct *Graph;typedef struct ENode{int adjVertex;  /*该边所指的顶点的位置*/int weight;     /*边的权*/struct ENode *nextEdge;  /*指向下一条边的指针*/
}ENode;typedef struct VNode{VertexType data;   /*顶点信息*/ENode *firstEdge; /*指向第一条依附该顶点的边的弧指针*/
}VNode;struct GraphStruct{VNode vexs[MAXVEX];int vertexNum,edgeNum; /*图的当前顶点数和弧数*/
};

无向带权图(邻接表)

完成void BFS(Graph g,int k)函数,该函数从第k个点开始广度优先遍历图g,遍历过程中把访问过的顶点的设置为1(初始为0)。请注意,在测试代码中已经完成int (Graph g, v);函数(在图g中查找顶点v的序号,不存在返回-1),你可以直接调用。

我们这里怎么实现图的深搜:

void DFS(Graph g,int v0)
{ENode* p; int w;g->vexs[v0].visited=1;p=g->vexs[v0].firstEdge;while(p!=NULL){//每一个while循环,都是同一个节点的边。 w=p->adjVertex;if(g->vexs[w].visited==0){DFS(g,w);//每一次DFS都是更进一层的循环 }p=p->nextEdge;}
}

实现图的广搜:

void BFS(Graph g,int k)
{queue q;ENode *p;g->vexs[k].visited=1;q.push(k);int v,w;while(q.size()){//循环一次,访问一个节点的所有边v=q.front();q.pop();p=g->vexs[v].firstEdge;while(p!=NULL){w=p->adjVertex;if(g->vexs[w].visited==0){g->vexs[w].visited=1;q.push(w);//将边对应的节点放到队列里面}p=p->nextEdge;}}
} 

无向带权图(邻接矩阵)

在这里我们怎么实现图的深搜:

void DFS(Graph g, int i)  
{  g->visited[i] = 1;  for(int j = 0; j < g->vertexNum; j ++){if(g->edge[i][j] == 1 && g->visited[j] == 0) {DFS(g,j); }      }           
}  

在这里我们怎么实现图的广搜:

void BFS(Graph g,int i)
{queue q;q.push(i);int v;while(q.size()){i=q.front();q.pop();for(int j=0;jvertexNum;j++){if(g->edge[i][j]==1 && g->visited[j]==0){g->visited[j]=1;q.push(j);}	}                                                                                                    }
} 

深搜:

广搜:

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了