图的遍历(数据结构)
1 #include <iostream>
2 using namespace std;
3
4 //图的顺序存储的数据定义(邻接矩阵)
5 typedef struct VertexType {
6 char info;
7 int no;
8 };
9 typedef struct MGraph {
10 int edges[maxsize][maxsize];//邻接矩阵定义,如果是有权图,则可以把int改为float;
11 int e,n;//边数、顶点数
12 VertexType vex[maxsize];
13 };
14
15 //图的链式存储的数据定义(邻接表)
16 typedef struct ArcNode { //定义边
17 int adjvex;//定义当前边连接的顶点
18 struct ArcNode *nextarc;//定义与当前边同属一个顶点的下一条边
19 int info;//定义当前边的权值
20 };
21 typedef struct VNode { //定义顶点
22 char data;
23 ArcNode *firstarc;
24 };
25 typedef struct AGraph { //定义链式存储结构
26 int e,n;
27 VNode adjlist[maxsize];
28 }
29
30 //深度优先遍历搜索
31 int visit[maxsize];
32 void dfs(AGraph *G,int v) {
33 ArcNode *p;
34 visit[v]=1;
35 Visit(v);
36 p=G->adjlist[v].firstarc;
37 while(p!=NULL) {
38 if(visit[p->adjvex]==0) {
39 dfs(G,p->adjvex);
40 }
41 p=p->nextarc;
42 }
43 }
44
45 //广度优先遍历搜索
46 void bfs(AGraph *G,int v,int visit[maxsize]) {
47 ArcNode *p;
48 int que[maxsize];
49 int rear=0,front=0;
50 Visit(v);
51 visit[v]=1;
52 rear=(rear+1)%maxsize;
53 que[rear]=v;
54 while(rear!=front) {
55 front=(front+1)%maxsize;
56 int i=que[front];
57 p=G->adjlist[i].firstarc;
58 while(p!=NULL) {
59 if(visit[p->adjvex]==0) {
60 Visit(p->adjvex);
61 visit[p->adjvex]=1;
62 rear=(rear+1)%maxsize;
63 que[rear]=p->adjvex;
64 }
65 p=p->nextarc;
66 }
67 }
68 }
69
70 void DFS(AGraph *g) { //深度遍历
71 for(int i=0; i<g->n; i++) {
72 if(!visit[i]) {
73 dfs(g,i);
74 }
75 }
76 }
77
78 void BFS(AGraph *g) { //广度遍历
79 for(int i=0; i<g->n; i++) {
80 if(!visit[i]) {
81 bfs(g,i,visit);
82 }
83 }
84 }
85
86 int main() {
87
88
89 return 0;
90 }