图的基本操作:图的创造(基于邻接矩阵)、深度搜索(DFS)、广度搜索(DFS)
2013-07-01 16:02
302 查看
#include <iostream> #include <string> #include <queue> using namespace std; typedef struct Graph { string vexs[10];//顶点表 int arc[10][10];//邻接矩阵 int num_vertex;//顶点数 int num_edge;//边数 }Graph; bool visited[10];//存储顶点是否被访问过 int get_location(Graph g, string s)//获取顶点s在图中位置的下标 { int i; for(i=0;i<g.num_vertex;i++) { if(g.vexs[i] == s) return i; } return -1; } void create_graph(Graph &g)//创建无向网图 { int i,j,k; string s1,s2; cout<<"请输入顶点数和边数:"; cin>>g.num_vertex>>g.num_edge; cout<<"请输入顶点:"; for(i=0;i<g.num_vertex;i++)//读入顶点信息,建立顶点表 cin>>g.vexs[i]; for(i=0;i<g.num_vertex;i++)//邻接矩阵初始化 for(j=0;j<g.num_vertex;j++) g.arc[i][j] = 0; cout<<"请输入边:"<<endl; for(k=0;k<g.num_edge;k++)//建立邻接矩阵 { cin>>s1>>s2; i = get_location(g,s1); j = get_location(g,s2); g.arc[i][j] = g.arc[j][i] = 1;//因为是无向图,矩阵对称 } } void DFS(Graph g, int i) { int j; visited[i] = true; cout<<g.vexs[i]<<" "; for(j=0;j<g.num_vertex;j++) { if(g.arc[i][j]==1 && !visited[j]) DFS(g,j);//对未访问的临接顶点递归调用 } } void DFS_traverse(Graph g) { int i; for(i=0;i<g.num_vertex;i++)//初始顶点状态为未访问状态 visited[i] = false; for(i=0;i<g.num_vertex;i++)//对未访问过的顶点调用DFS { if(!visited[i]) DFS(g,i); } } void BFS_traverse(Graph g) { int i,j; for(i=0;i<g.num_vertex;i++) visited[i]=false; queue<int> q; for(i=0;i<g.num_vertex;i++) { if(!visited[i])//顶点未被访问 { visited[i] = true; q.push(i); while(!q.empty()) { int k = q.front(); cout<<g.vexs[k]<<" "; q.pop(); for(j=0;j<g.num_vertex;j++) { if(g.arc[k][j]==1 && !visited[j])//判断其他顶点与此顶点是否存在边且未被访问过 { visited[j] = true; q.push(j); } } } } } } int main() { Graph g; create_graph(g); cout<<"深度搜索:"; DFS_traverse(g); cout<<endl; cout<<"广度搜索:"; BFS_traverse(g); cout<<endl; return 0; }
参考:/article/8537761.html
相关文章推荐
- 图的基本操作:图的创造(基于邻接表)、深度搜索(DFS)、广度搜索(DFS)
- 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)
- 基于邻接矩阵实现的DFS深度优先搜索
- 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)
- 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)
- 图基本算法 图搜索基于邻接表的(广度优先、深度优先)
- 22.基于 邻接表 表示的 深度优先搜索dfs 和 广度优先搜索bfs
- 图的基本操作(基于邻接矩阵):图的构造,深搜(DFS),广搜(BFS)
- 【数据结构】深度优先搜索BFS和广度优先搜索DFS
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 基于邻接表实现的DFS深度优先搜索
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构和算法总结(一):广度优先搜索BFS和深度优先搜索DFS
- 算法——基本的图算法:广度优先搜索、深度优先搜索
- 无权图无向图【邻接矩阵存储】深度搜索和广度搜索--Java实现
- 数据结构实验之图论一:基于邻接矩阵的广度优先搜索遍历 oj
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)