邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
来源:互联网 发布:android 浏览器 知乎 编辑:程序博客网 时间:2024/06/02 08:30
图的两种存储方式:邻接矩阵和邻接表;
两种遍历方式:深度优先和广度优先;
首先以一个结构体存储一个图:
struct MGraph{ int vertex[maxvertex]; //存顶点 int arc[maxvertex][maxvertex]; //存边(邻接矩阵) int vertexnum,arcnum; //顶点数和边数};
其次是对图的初始化:
void CreatMGraph(MGraph *&G){ int i,j; cin1>>G->vertexnum>>G->arcnum; //输入顶点数和边数 for(i=0;i<G->vertexnum;i++) //输入每个顶点的值 cin1>>G->vertex[i]; for(i=0;i<G->vertexnum;i++) //初始化邻接矩阵 for(j=0;j<G->vertexnum;j++) G->arc[i][j]=0; for(i=0;i<G->arcnum;i++) { int n,m,w; cin1>>n>>m>>w; //修改邻接矩阵中的值 G->arc[n][m]=w; G->arc[m][n]=w; }}
在此之前需要定义一个全局变量的visited数组:
int visited[maxvertex]; //标记已被访问过的顶点(全局变量)//广度优先遍历void BFS(MGraph *&G,int v){ queue<int> q; int x,j; if(!visited[v]) //即为visited[v]==0,也就是未被访问过 { cout<<G->vertex[v]<<" "; visited[v]=1; q.push(v); //被访问的顶点入队 } while(!q.empty()) //队不空进循环 { x=q.front(); //取队头元素 q.pop(); //队头出队 for(j=0;j<G->vertexnum;j++) if (G->arc[x][j]&&!visited[j]) { cout<<G->vertex[j]<<" "; visited[j]=1; //标记为访问过 q.push(j); //被访问的顶点继续入队 } }}//深度优先遍历void DFS(MGraph *&G,int v){nt j; if(!visited[v]) { cout<<G->vertex[v]<<" "; visited[v]=1; //标记为访问过 } for(j=0;j<G->vertexnum;j++) if (G->arc[v][j]&&!visited[j])//邻接矩阵的第(v,j)元素不为0 { //且未被访问过则递归 DFS(G,j); }}
此为图的邻接矩阵的输出函数:
void Print(MGraph *G){ int i,j; for(i=0;i<G->vertexnum;i++) { for(j=0;j<G->vertexnum;j++) cout<<G->arc[i][j]<<" "; cout<<endl; }}
main函数调用上面函数:
int main(){ MGraph *G=new MGraph; CreatMGraph(G); cout<<"输出邻接矩阵:"<<endl; Print(G); cout<<"深度优先搜索:"; DFS(G,0); cout<<endl; memset(visited,0,sizeof(visited));//非常重要!!在下一个搜索之前一定要将标志位全部重新赋值为0 cout<<"广度优先搜索:"; BFS(G,0); cout<<endl; return 0;}
0 0
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- 无向图的邻接矩阵 -- DFS - 深度优先遍历
- 邻接矩阵实现--图的深度优先遍历DFS和广度优先遍历BFS
- 图的遍历 DFS(深度优先),BFS(广度优先)
- 算法: 无向图的深度优先搜索(dfs)和广度优先搜索(bfs)
- 基于邻接矩阵的无向图的广度优先遍历
- 无向图的广度优先遍历---邻接矩阵实现
- 无向图的邻接矩阵,深度优先遍历和广度优先遍历的递归与非递归算法
- 无向图的邻接矩阵,深度优先遍历广度优先遍历的递归与非递归算法
- 【图】图的邻接矩阵存储和广度、深度优先遍历
- 图的邻接矩阵存储:深度、广度优先遍历
- 无向图邻接矩阵的储存和深度优先遍历
- 图的深度/广度优先遍历(BFS DFS)
- 无向图深度优先遍历和广度优先遍历
- 广度优先生成树(无向图,邻接矩阵,BFS)
- 图的邻接矩阵存储 深度优先遍历 广度优先遍历 C语言实现
- C语言实现图的邻接矩阵存储结构及深度优先遍历和广度优先遍历
- 无向图的深度和广度优先遍历(javascript)
- Android Launcher 应用图标大小不一的情况或GirdView Item 不规则处理与解决
- 【grunt整合版】使用grunt打包前端代码
- postgresql 时区配置,系统主机与数据库时间不一致
- LSTM实现详解
- Linux (Ubuntu) 下的Android模拟器:Genymotion
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- Linux下的调试工具gdb
- 深入分析Java使用+和StringBuilder进行字符串拼接的差异
- java按值传递or引用传递?
- 11.19 AS设置,maven初步,常用算法和设计模式初聊
- loadrunner Analysis服务器资源分析
- IOSnil/Nil/NULL的区别
- Android Fragment简介
- 支付宝动态加载apk原理剖析