图的创建,遍历
来源:互联网 发布:php远程ftp上传图片 编辑:程序博客网 时间:2024/06/10 14:29
这里是根据老师给的参考代码重新写了一个关于图的遍历。
DFS使用递归,BFS使用队列。
代码如下:
#include<cstdio>#include<cstdlib>using namespace std;const int maxn = 100;typedef struct{ char vexs[maxn]; //顶点表 int edges[maxn][maxn];//邻接矩阵 int n, e; //分别为顶点数和边数 }MGraph;int visited[maxn];/*建立邻接矩阵,并初始化*/void CreateMGraph(MGraph &G){ char a; printf("输入顶点数(n)和边数(e):"); scanf("%d%d", &G.n, &G.e); getchar(); for(int i=0; i<G.n; i++) { scanf("%c", &a); G.vexs[i] = a; } for(int i=0; i<G.n; i++) { visited[i]= 0;//初始化visited for(int j=0; j<G.n; j++) { G.edges[i][j] = 0; } } int s,t; //建图 for(int i=0; i<G.e; i++) { scanf("%d%d", &s, &t); G.edges[s][t] = 1; G.edges[t][s] = 1; } } /*对每个联通分量进行深度优先遍历*/void DFSM(MGraph G, int i){ printf("%c",G.vexs[i]); for(int j=0; j<G.n; j++) { if(G.edges[i][j] && !visited[j]) { visited[j] = 1; DFSM(G, j); } }}/*对整个图进行DFS*/ void DFS(MGraph G){ for(int i=0; i<G.n; i++) { if(!visited[i]) {//对于每个连通分量进行DFSM visited[i] = 1; DFSM(G, i); } }}/*顺序队列,即用数组表示队列*/void BFS(MGraph G, int k){ int f=0, r=0; int q[maxn]; for(int i=0; i<=G.n; i++) { visited[i] = 0; q[i] = -1; } printf("%c", G.vexs[k]); visited[k] = 1; q[r] = k; while(q[f] != -1) { int u = q[f]; f += 1; for(int v=0; v<G.n; v++) { if(G.edges[u][v] && !visited[v]) { printf("%c", G.vexs[v]); visited[v] = 1; r += 1; q[r] = v; } } }} int main(){ MGraph G; CreateMGraph(G); DFS(G); printf("\n"); BFS(G, 3); return 0;}
阅读全文
0 0
- 图的创建遍历
- 图的创建,遍历
- 图的创建和遍历
- 图的创建和遍历
- 图的创建与遍历
- 图的遍历和创建
- 图的创建 深度优先遍历 广度优先遍历
- 图的创建,遍历以及销毁
- 邻接矩阵图的创建及遍历
- 图的邻接表创建以及遍历
- 数据结构之图的创建及其遍历
- 数据结构-图的创建与遍历
- 图的创建与遍历(C++)
- [数据结构]图的创建与遍历
- 数据结构--图的创建以及遍历
- Java 实现图的创建和遍历
- 图的创建和深度优先遍历
- 二叉树的创建、遍历
- java数组
- 2017年下半年专注于游戏开发
- zec挖矿(zcash挖矿)鱼池跟蚂蚁矿池的比较到底哪个好?哪个收益高?
- Tree(3)--二叉树的实现及四种遍历(递归/非递归)
- c++11使用可变参数实现日志打印
- 图的创建,遍历
- WEBRTC 发送端拥塞控制
- Game of Connections(标准卡特兰数及高精度)
- XShell 显示中文
- SQL经典语句用法整合
- Java的BigDecimal类
- 【实践】cephfs + Ganesha环境部署
- java后台封装json数据学习(一)
- 数据级的权限管理和功能级的权限管理的区别,不使用框架(shiro,springsecurity)做权限设计的思考