C++邻接表图操作
来源:互联网 发布:淘宝买花苗 编辑:程序博客网 时间:2024/05/29 15:59
#include <iostream>#include <vector>#include <string>#include <map>#include <queue>#include <sstream>#include <functional>#include<iomanip>using namespace std;typedef struct{ vector<vector<int>> arcs;//邻接矩阵 vector<char> vexs;//顶点表 int vexnum, edgenum;//顶点数和边数 vector<bool> visited;}Graph;int locates(Graph *g, char ch){ int i = 0; for (i = 0; i < g->vexnum; i++) { if (g->vexs[i] == ch) { break; } } if (i >= g->vexnum) { return -1; } return i;}void CreateGraph(Graph &G){ cout<<"创建邻接矩阵的无向图:"<<endl; int i,j,k,w; //G5的存储: G.vexnum = 8; G.edgenum = 9; G.visited=vector<bool>(G.vexnum, false); for (i = 0; i < G.vexnum; ++i){ vector<int> a; for (j = 0; j < G.vexnum; ++j) { a.push_back(0); } G.arcs.push_back(a); } G.vexs.push_back('1'); G.vexs.push_back('2'); G.vexs.push_back('3'); G.vexs.push_back('4'); G.vexs.push_back('5'); G.vexs.push_back('6'); G.vexs.push_back('7'); G.vexs.push_back('8'); G.arcs[0][1] = 1; G.arcs[1][0] = 1; G.arcs[1][3] = 1; G.arcs[3][1] = 1; G.arcs[3][7] = 1; G.arcs[7][3] = 1; G.arcs[7][4] = 1; G.arcs[4][7] = 1; G.arcs[4][1] = 1; G.arcs[1][4] = 1; G.arcs[0][2] = 1; G.arcs[2][0] = 1; G.arcs[2][5] = 1; G.arcs[5][2] = 1; G.arcs[5][6] = 1; G.arcs[6][5] = 1; G.arcs[6][2] = 1; G.arcs[2][6] = 1; }void DFS(Graph &g, int i){ cout << g.vexs[i]<<" "; g.visited[i] = true; for (int j = 0; j < g.vexnum; j++){ if (g.arcs[i][j] == 1 && !g.visited[j]){ DFS(g, j); } }}void DFSTraverse(Graph &g){// for (int i = 0; i < g.vexnum; i++) g.visited[i] = false; for (int i = 0; i < g.vexnum; i++) if (!g.visited[i]) DFS(g, i); //v未访问过,从vi开始DFS搜索 }void BFSTraverse(Graph &g){ for (int i = 0; i < g.vexnum; i++) g.visited[i] = false; queue<int> q; for (int i = 0; i < g.vexnum; i++){ if (!g.visited[i]){ g.visited[i] = true; cout << g.vexs[i] << " "; q.push(i); while (!q.empty()){ int m = q.front(); q.pop(); for (int j = 0; j < g.vexnum; j++){ if (g.arcs[m][j] == 1 && !g.visited[j]){ g.visited[j] = true; cout << g.vexs[j] << " "; q.push(j); } } } } }}//打印图void printGraph(Graph g){ int i, j; for (i = 0; i < g.vexnum; i++) { for (j = 0; j < g.vexnum; j++) { printf("%d ", g.arcs[i][j]); } printf("\n"); }}int main(){ Graph g; //邻接矩阵创建图 CreateGraph(g); printGraph(g); BFSTraverse(g); DFSTraverse(g); return 0;}
0 0
- 图的邻接表存储以及相关操作 C语言
- 图的邻接表操作
- C++邻接表图操作
- 【总结】邻接表 图的基本操作
- 图的邻接表的操作实现
- 邻接表对图常用的操作
- 图的邻接表基本操作
- 图的基本操作(基于邻接表
- 图的邻接表存储 c实现
- 图的邻接表存储 c实现
- 图的邻接表存储 c实现
- 图的邻接表存储c实现
- 图的邻接表存储 c实现
- 图的邻接表C实现
- 图的邻接表存储 c实现
- 图的邻接表存储 c实现
- 图的邻接表存储 c实现
- 复习(数据结构):图:c语言:邻接表
- css知多少(8)——float上篇
- C++ 对齐规则
- linux下C语言多线程使用
- Docker使用-中文乱码问题处理
- csu 1831: Found
- C++邻接表图操作
- 四种实现Textview超链接的方式
- 设计模式-工厂模式
- java六大设计模式
- 使用asp.net core的启动篇
- MySQL注入技巧性研究
- unity学习笔记(一)
- Unity开发HTC vive 一、手柄按钮
- StateMachine 的简单使用