邻接矩阵的定义:
#define MAXVEX 100typedef 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
无向带权图(邻接矩阵)
在这里我们怎么实现图的深搜:
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
深搜:
文章插图
广搜:
文章插图
- 解析三国将领嵇康与钟会之间有何纠葛
- 揭秘:殷开山是谁?殷开山与唐玄奘真有关系吗
- 营妓薛涛的爱情:与元稹的姐弟恋不过最早的备胎
- 战国时代的秦国与赵国有多牛?看完就震惊了
- 殷浩是个什么样的人?殷浩与桓温是什么关系
- 南宋大臣崔与之生平简介崔与之是怎么死的
- 武汉大学计算机学院深造率,2017届本科毕业生深造率排名与分析
- YUM源配置与挂载
- 一加六,一加6与小米8销量对比?这两个该买哪个?
- 彼岸花养殖方法与花期