链式存储无向图的基本操作
2016-07-20 21:29
543 查看
首先声明定义之后会用到的宏
链式存储结构
创建初始化图
链式存储无向图 递归深度优先遍历
链式存储无向图广度优先遍历
测试
typedef char VertexType; typedef int EdgeType; #define INF 65535 #define MAXVEX 100 bool visited[MAXVEX];
链式存储结构
typedef struct EdgeNode { int adjvex; EdgeType weight; EdgeNode *next; } EdgeNode; typedef struct VextexNode { VertexType data; EdgeNode *firstedge; } VextexNode, AdjList[MAXVEX]; typedef struct GraphAdjList { AdjList adjList; int vexter_num, edge_num; } GraphAdjList;
创建初始化图
void create_algraph(GraphAdjList *G) { EdgeNode *e; cin >> G->vexter_num >> G->edge_num; for(int i = 0; i < G->vexter_num; ++ i) { cin >> G->adjList[i].data; G->adjList[i].firstedge = NULL; } for(int i = 0; i < G->edge_num; ++ i) { int v_s, v_e; cin >> v_s >> v_e; e = new EdgeNode; e->adjvex = v_e; e->next = G->adjList[v_s].firstedge; G->adjList[v_s].firstedge = e; e = new EdgeNode; e->adjvex = v_s; e->next = G->adjList[v_e].firstedge; G->adjList[v_e].firstedge = e; } }
链式存储无向图 递归深度优先遍历
void DFS(GraphAdjList *G, int i) { visited[i] = true; cout << G->adjList[i].data << " "; EdgeNode *p; p = G->adjList[i].firstedge; while(p) { if(!visited[p->adjvex]) DFS(G, p->adjvex); p = p->next; } } void DFS_Traverse(GraphAdjList *G) { for(int i = 0; i < G->vexter_num; ++ i) visited[i] = false; for(int i = 0; i < G->vexter_num; ++ i) if(!visited[i]) DFS(G, i); }
链式存储无向图广度优先遍历
void BFSTraverse(GraphAdjList *G) { for(int i = 0; i < G->vexter_num; ++ i) visited[i] = false; queue<int> Q; EdgeNode *p; for(int i = 0; i < G->vexter_num; ++ i) { if(!visited[i]) { visited[i] = true; cout << G->adjList[i].data << " "; Q.push(i); while(!Q.empty()) { int k = Q.front(); Q.pop(); p = G->adjList[k].firstedge; while(p) { if(!visited[p->adjvex]) { visited[p->adjvex] = true; cout << G->adjList[p->adjvex].data << " "; Q.push(p->adjvex); p = p->next; } else { p = p->next; } } } } } }
测试
int main() { /* 5 6 A B C D E 0 1 1 2 0 4 2 4 0 3 2 3 */ GraphAdjList *GL = new GraphAdjList; create_algraph(GL); DFS_Traverse(GL); cout << endl; BFSTraverse(GL); cout << endl; system("pause"); return 0; }
相关文章推荐
- 注册表的组织结构
- Ruby on Rails所构建的应用程序基本目录结构总结
- SQLSERVER的非聚集索引结构深度理解
- 调整SQLServer2000运行中数据库结构
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍
- C#中结构(struct)的部分初始化和完全初始化实例分析
- C#中类与结构的区别实例分析
- C#枚举类型与结构类型实例解析
- javascript实现表现、结构、行为分离的选项卡效果!
- 实用的js 焦点图切换效果 结构行为相分离
- asp下生成目录树结构的类
- 深入解析C#编程中struct所定义的结构
- PHP读书笔记整理_结构语句详解
- 浅谈Android系统的基本体系结构与内存管理优化
- Android编程入门之HelloWorld项目目录结构分析
- 一分钟掌握linux系统目录结构
- Go语言的Windows下环境配置以及简单的程序结构讲解
- thinkphp文件引用与分支结构用法实例