首页 > 代码库 > 图的广度、深度优先遍历 C语言
图的广度、深度优先遍历 C语言
以下是老师作为数据结构课的作业的要求,没有什么实际用处和可以探讨和总结的的地方,所以简单代码直接展示。
宽度优先遍历:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 6 #define _clr(x, y) memset(x, y, sizeof(x)) 7 #define N 1010 8 9 int head[N], tot;10 struct Edge11 {12 int v, next;13 }edge[N];14 int Queue[N];15 bool used[N];16 17 void Add(int u, int v)18 {19 edge[tot].v = v;20 edge[tot].next = head[u];21 head[u] = tot++;22 }23 24 void bfs(int s)25 {26 _clr(Queue, 0);27 _clr(used, 0);28 int front=0, rear=0;29 Queue[rear++] = 1;30 cout << s <<" ";31 used[s] = true;32 while(front < rear)33 {34 int Cur = Queue[front++];35 for(int i=head[Cur]; i!=-1; i=edge[i].next)36 {37 int v = edge[i].v;38 if(!used[v])39 {40 used[v] = true;41 cout << v << " ";42 Queue[rear++] = v;43 }44 }45 }46 cout << endl;47 }48 int main()49 {50 int n, m, x, y;51 cout << "请输入图的顶点数和边数: ";52 while(cin >> n >> m && n+m)53 {54 tot = 0;55 _clr(head, -1);56 for(int i=0; i<m; i++)57 {58 scanf("%d%d",&x, &y);59 Add(x, y);60 }61 cout << "广度优先遍历顺序如下:\n";62 bfs(1);63 cout<<endl;64 cout << "请输入图的顶点数和边数(输入两个0代表结束输入): ";65 }66 return 0;67 }
深度优先遍历:
1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 using namespace std; 5 6 #define _clr(x, y) memset(x, y, sizeof(x)) 7 #define N 1010 8 9 int head[N], tot;10 struct Edge11 {12 int v, next;13 }edge[N];14 int Queue[N];15 bool used[N];16 17 void Add(int u, int v)18 {19 edge[tot].v = v;20 edge[tot].next = head[u];21 head[u] = tot++;22 }23 24 void dfs(int s)25 {26 cout << s << " ";27 for(int i=head[s]; i!=-1; i=edge[i].next)28 {29 int v = edge[i].v;30 if(!used[v])31 {32 used[v] = true;33 dfs(v);34 }35 }36 }37 int main()38 {39 int n, m, x, y;40 cout << "请输入图的顶点数和边数: ";41 while(cin >> n >> m && n+m)42 {43 tot = 0;44 _clr(head, -1);45 for(int i=0; i<m; i++)46 {47 scanf("%d%d",&x, &y);48 Add(x, y);49 }50 cout << "深优先遍历顺序如下:\n";51 dfs(1);52 cout<<endl;53 cout << "请输入图的顶点数和边数(输入两个0代表结束输入): ";54 }55 return 0;56 }
图的广度、深度优先遍历 C语言
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。