图-图的遍历(数据结构)

图的遍历(数据结构)

 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 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值