首页 > 编程知识 正文

深度优先遍历序列怎么求,图的深度优先遍历代码

时间:2023-05-05 16:13:15 阅读:16303 作者:1337

% E6 % B7 % B1 % E3 % 81 % 95 % E5 % 84 % aa % E5 % 85 % 88 % E3 % 83 % a9 % E3 % 83 % 90 % E3 % 83 % BC % E3 % % 95 % E5 % 84 % aa % E5 % 85 % 88 % E3 % 83 % E3 % a9 % E3 % 83 % 90 % E3 % 83 % BC % E3 % 82 % B9 % E3 % 81 % afbfff E7 % a7 % B0 % E3 % 81 % 99 % E3 % 82 % 8b % 0a % E5 % 9b % B3 % E3 % 81 % AE % E4 % BD % E6 % 88 % 90 % ef % BC % 88 % ed c % 89 % ef % BC % 89 % ef % BC % 89 % E3 % 80 % 82 % 0a % E6 % B1 % E3 % 81 % 95 % E5 % 84 % aa % E5 % 85 % 88 % E3 % 83 3 % BC % E3 % 82 % B9 % E5 % B1 % 95 % E7 % a4 % ba % E3 % 81 % a7 % E4 % BD % 9c % 88 % 90 % E3 % 81 % 95 % E3 % 82 % 8c % 81 % a7 % E3 % 81 % 99 % E3 % 80 % 823358 www.Sina.com % 2f % ef % BC % 8ca % E7 % 82 % B9 % E3 % 81 % 8b % E3 % 82 % 89 BC % E3 % 82 % B9 % E3 % 82 % 92 % E8 % a1 % 8c % E3 % 81 % 84 % E3 % 81 % be % E3 % 81 % 83 % 80 % 82 % 0a % E3 % 83 % 993 3 % 83 % 90 % E3 % 83 % BC % E3 % 82 % B9 % E3 % 81 % 99 % E3 % 82 % 8b % 0a2. % 20a % E7 % 82 % B9 % E6 % 9c % 80 % E5 % be 8b % E3 % 82 % 89c % ef % BC % 89 % E3 % 82 % 92 % E8 % a6 % 8b % E3 % 81 % E3 % 81 % E3 % 80 % 81c % E7 % 82 % B9 % % be % 8c % E3 % 81 % ab % E4 % BD % 9c % E6 % 88 % 90 % E3 % 81 % 97 % E3 % 81 % 9f % E8 % be % ba3 % ef % BC % 88c % E3 % 81 % B9 % E3 % 81 % ab % E5 % 88 % B0 % e9 % 81 % 94 % E3 % 81 % 99 % E3 % 82 % ef % BC % 89 % E8 % aa % E5 % 95 % 8f % 81 % 8f % E3 % 81 % aa % E3 % 82 % 8b % ef % BC % 89 % ef % BC % 89 % E3 % 80 % 82 % 0a4. % 20d % E7 % 82 % B9 % E3 % 81 % ab % E5 % 88 % B0 % E7 % 9d % 80 % E3 % 81 % 99 % E3 % 82 % 8b % 0a 5. % 20b % E7 % 82 % B9 % E8 % b5 % B0 % E6 % 8c % E8 % a6 % 8b % E3 % 81 % a4 % E3 % 81 % 8b % E3 % 82 % 89 % E3 % 81 % aa % E3 % 84 % E3 % 80 % 81 % E7 % b5 % 82 % ee 3 % 81 % AE % E7 % b5 % 90 % E6 % 9e % 9c % 3aa-c-d-b % 0a2% ef % BC % 89 % E5 % AE % E8 % a1 % 8c % E4 % be % 8b % E3 % 80 % 81e % E3 % 81 % af % E8 % be % ba % E3 % 81 % AE % E6 % 95 % B0 % 0a % ef % BC % 88 % E4 % b8 % 89 % ef % BC % 89 % BC % 89 % E3 % 82 % B3 % E3 % 83 % 83 % 91 % E3 % 82 % a4 % E3 % 83 % ab % E7 % 92 % B0 % E5 % a2 % 83 % ef % BC % atype % ef % BC % 9b % 20 % 2f % 2a % e9 % A0 % 82 % E7 % 82 % B9 % E6 % 83 % 85 % E5 % A0 % B1 % E3 % 83 % 87 % E3 % BC % a1 % A8 % E3 % 83 % 83 % E3 % BC % E3 % 83 % 89 % 2a % 2f int % 20 adjvex % ef % BC % 9b % 20 % 2f % 2a % e9 % 9a % a3 % % BC % 9b % 20 typedef % 20 struct % 20 vnode % 20 % 7b % 20 % 2f % 2a % E3 % 83 % 83 % E3 % 83 % 83 % 80 % E3 % 83 % 83 % bb a % e9 % A0 % 82 % E7 % 82 % B9 % E6 % 83 % 85 % E5 % A0 % B1 % 2a %2a % 20 first edge % ef % BC % 9b % 20 % 2f % 81 % AE % E5 % 85 % 88 % e9 % A0 % ad % E3 % 81 % ab % e9 % 9a % a3 % E6 % 8e % a5 % E3 % 81 % E3 % 82 % 8b % E3 % 993 % 7b % 20 % 2f % 2a % e9 % 9a % a3 % E6 % 8e % a5 % E8 % a1 % E8 % E3 % 82 % BF % E3 % E4 % 83 % 97 % 2a %2fvexnode E3 % 83 % 89 % E3 % 83 % 8e % E3 % 83 % 83 % 89 % E3 % 81 % AE % e9 % A0 % 86 % E5 % ba % 8f % E8 % a1 % A8 % 2a % 222a % 95 % B0 % E3 % 81 % A8 % E8 % be % ba % E6 % 95 % B0 % 2a % 2f %7dad jgraph % ef % BC % 9b % 20 int % 20 visited % 5bm % 5d % BC % 8cj % ef % BC % 8ck % ef % BC % 9b % 20 edge node % 2a % 20s % ef % BC % 9b % 20 printf % ef % BC % 88 pleaseinputnande 3360 g-n % ef % BC % 8cg-e % ef % BC % 89 % ef % BC % 9b % 20 % 2f % 2a % e9 % A0 % 82 % B9 % E3 % 81 % AE % E6 % 95 har % ef % BC % 88 % ef % BC % 9b % 20 printf % ef % BC % 88 please input % 25d vertex : % ef % BC % 89 % E3 % 80 % 81g-n % er b % 20i % ef % BC % 89 % ef % BC % 88 % 7b printf % ef % BC % 89 % ef % BC % 89 % E3 % 80 % 20 % 201 % ef % BC % 89 % E3 % 81 % 97 % E3 % 81 % a6 % E3 % 81 % 8f % E3 % 81 % A0 % E3 % 81 % 84 % E3 % 80 % 82 % 20 scanf _ s % ef % b % 20 % 2f % 2a % e9 % A0 % 82 % E7 % 82 % B9 % E6 % 83 % 85 % E5 % A0 % B1 % 82 % E8 % aa % ad % E3 % 81 % BF % E8 first edge % 20 % 3d % 20 null % ef % BC % 9b % 20 % 2f % 2a % E8 % be % E3 % 81 % AE % E8 % a1 % A8 % E3 % 82 % 92 % E7 % % 88 please input % d edges : % ef % BC % 88 % ef % BC % 8cg-e % ef % BC % 89 % ef % BC % 9b % 20 for % ef % BC % 88k % 3d0%

adjvex])DFS(G, p->adjvex);p = p->next;}}void DFStraverse(adjGraph G){int i;for (i = 0; i < G.n; i++)visited[i] = 0; /*初始化标志数组*/for (i = 0; i < G.n; i++)if (!visited[i]) /*vi未访问过,!0为真*/DFS(G, i);}int main(){adjGraph G;createAdjGraph(&G); /*创建图的邻接表*/printf("n The Graph is:n");print(G);DFStraverse(G);return 0;}          广度优先遍历 一:遍历展示

  广度优先遍历是一层一层的往下去遍历,我们可以用一个队列(先进先出)来存储每一层的节点,在遍历每一个节点时,取它下一层的节点,放到队列的末尾,遍历完一层时,下一层的节点也放到了队列中。

  创建的图如下:数字代表创建顺序,从b点进行广度优先遍历:
过程:
1.b点入队,(b为队头)
2.队头b出队,b点的边连接点倒序入队,d,c,a(d为队头)
3.队头d出队,d点的边连接点因为都已经入队,不作为(c为队头)
4.队头c出队,c点的边连接点因为都已经入队, 不作为(a为队头)
5.队头a出队,同上不作为(此时队列为空)
6.e点入队(e为队头)
7.队头e出队,无边表节点,结束
遍历结果(出队顺序):b->d->c->a 最后e

二:运行实例展示

n是顶点数,e是边数

三:代码及注释(编译环境:vs2019) #include<stdio.h>#include<stdlib.h>#define M 20 typedef char datatype; /*顶点信息数据类型*/typedef struct node { /*边表结点*/int adjvex; /*邻接点*/struct node* next;}edgeNode;typedef struct vnode { /*头结点类型*/datatype vertex; /*顶点信息*/edgeNode* firstEdge;/*邻接链表头指针*/}vertexnode;typedef struct { /*邻接表类型*/vertexnode adjList[M]; /*存放头结点的顺序表*/int n, e; /*图的顶点数与边数*/}adjGraph;int visited[M];/*------建立无向图的邻接表算法-------*/void createAdjGraph(adjGraph* G){int i, j, k;edgeNode* s;printf("Please input n and e:n");scanf_s("%d%d", &G->n, &G->e); /*输入顶点数与边数*/getchar(); /*取消回车符*/printf("Please input %d vertex:", G->n);for (i = 0; i < G->n; i++){printf("请输入第%d个顶点:", i + 1);scanf_s("%c", &G->adjList[i].vertex, 1); /*读入顶点信息*/getchar();G->adjList[i].firstEdge = NULL; /*边表置为空表*/}printf("Please input %d edges:", G->e);for (k = 0; k < G->e; k++) /*循环e次建立边表*/{printf("请输入第%d条边:", k + 1);scanf_s("%d%d", &i, &j); /*输入无序对(i,j)*///头插法s = (edgeNode*)malloc(sizeof(edgeNode));s->adjvex = j; /*邻接点序号为j*/s->next = G->adjList[i].firstEdge;G->adjList[i].firstEdge = s; /*将新结点*s插入顶点vi的边表头部*/s = (edgeNode*)malloc(sizeof(edgeNode));s->adjvex = i; /*邻接点序号为i*/s->next = G->adjList[j].firstEdge;G->adjList[j].firstEdge = s; /*将新结点*s插入顶点vj的边表头部*/}}/*---函数PRINT():输入邻接表存储结构---*/void PRINT(adjGraph G){edgeNode* p;int i;for (i = 0; i < G.n; i++) {printf("%c ", G.adjList[i].vertex);p = G.adjList[i].firstEdge;while (p) {printf("%d-->", p->adjvex);p = p->next;}printf("n");}}/*---函数locate():查找结点data在图中的序号---*/int locate(adjGraph G, datatype data) {int i;i = 0;while (i < G.n && G.adjList[i].vertex != data)i++;if (i == G.n)return -1;elsereturn i;}//breadth-first searchvoid BFS(adjGraph G, int i){int j;edgeNode* p;int queue[20], head, tail; /*FIFO队列*/head = -1;tail = -1; /*初始化空队列*/printf("%c ", G.adjList[i].vertex); /*访问源点v*/visited[i] = 1;queue[++tail] = i; /*被访问结点进队*/while (tail > head) /*当队列非空时,执行下列循环体*/{j = queue[++head]; /*出队*/p = G.adjList[j].firstEdge;while (p) /*广度优先搜索邻接表*/{if (visited[p->adjvex] == 0) {printf("%c ", G.adjList[p->adjvex].vertex);queue[++tail] = p->adjvex;visited[p->adjvex] = 1;}p = p->next;}}}/*-----从顶点v开始广度优先遍历图G----*/int BFStraverse(adjGraph G, datatype v){int i, count = 0;for (i = 0; i < G.n; i++)visited[i] = 0; /*初始化标志数组*/i = locate(G, v); /*寻找顶点v在邻接表中的位序*/if (i != -1) {count++; /*连通分量个数加1*/BFS(G, i);}for (i = 0; i < G.n; i++)if (!visited[i]) /*vi未访问过*/{printf("n");count++; /*连通分量个数加1*/BFS(G, i);}return count;}int main(){adjGraph G;int count; //连通分量个数datatype v;createAdjGraph(&G);printf("n The Graph is:n");PRINT(G);getchar();printf("input the source node:"); //输入源节点scanf_s("%c", &v, 1);count = BFStraverse(G, v); //从顶点v出发广度优先遍历图Gprintf("nthe total %d connectivityn", count);return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。