图——邻接表
来源:互联网 发布:淘宝登录 编辑:程序博客网 时间:2024/05/22 06:56
typedef char VertexType;//顶点类型#define MAXVEX 20typedef struct EdgeNode { int adjvex;//邻接点域,用于存储该顶点对应下标 EdgeNode *next;}EdgeNode;typedef struct VerTexNode { VertexType data; EdgeNode *firstEdge;}VerTexNode,AdjList[MAXVEX];typedef struct { AdjList adjlist;33333333333 int numVertexed, numEdges;//顶点数、边数}GraphAdjList;void CreateAdjList(GraphAdjList *G) { int i, j, k; EdgeNode *e; cout << "请输入顶点数和边数" << endl; cin >> G->numVertexed >> G->numEdges; for (i = 0; i < G->numVertexed; i++) { cin >> G->adjlist[i].data; G->adjlist[i].firstEdge = NULL; }//建立顶点信息 for (k = 0; k < G->numEdges; k++) { cout << "请输入vi,vj上两个顶点的序号:" << endl; cin >> i >> j; e = (EdgeNode*)malloc(sizeof(EdgeNode)); e->adjvex = j; e->next = G->adjlist[i].firstEdge; G->adjlist[i].firstEdge = e; e = (EdgeNode*)malloc(sizeof(EdgeNode)); e->adjvex = i; e->next = G->adjlist[j].firstEdge; G->adjlist[j].firstEdge = e; }}
使用深度优先遍历
int visitied[MAXVEX];void DFS(GraphAdjList *GL, int i) { EdgeNode *p; visitied[i] = 1; cout << GL->adjlist[i].data ; p = GL->adjlist[i].firstEdge; while (p) { if (!visitied[p->adjvex]) DFS(GL, p->adjvex); p=p->next; }}void DFSTraverse(GraphAdjList GL) { int i; for (i = 0; i < GL.numVertexed; i++) { visitied[i] = 0; } for (i = 0; i < GL.numVertexed; i++) { if (!visitied[i]) DFS(&GL, i); }}
广度优先遍历
typedef struct Queue { int Q[MAXVEX]; int font; int rear;} Queue;//使用循环队列原因void InitQueue(Queue *Q) { Q->font = 0; Q->rear = 0;}bool EnQueue(Queue *Q, int e) { if ((Q->font) != (Q->rear + 1) % MAXVEX) { Q->Q[Q->rear] = e; Q->rear = (Q->rear + 1) % MAXVEX; return 1; } else return 0;}bool DeQueue(Queue *Q) { if ((Q->font) != (Q->rear)) { //*e = Q->Q[Q->font]; Q->font = (Q->font + 1) % MAXVEX; return 1; } else return 0;}int visited[MAXVEX] = { 0 };void BFSTraverse(GraphAdjList GL) { int i; EdgeNode *p; Queue Q; InitQueue(&Q); for (i = 0; i != GL.numVertexed; i++) { if (!visited[i]) { visited[i] = 1; cout << GL.adjlist[i].data << endl; EnQueue(&Q, i); while (Q.font != Q.rear) { DeQueue(&Q); cout << "查看i:" << i<<endl; p = GL.adjlist[i].firstEdge; while (p) { if (!visited[p->adjvex]) { visited[p->adjvex] = 1; cout << GL.adjlist[p->adjvex].data << endl; EnQueue(&Q, p->adjvex); } p = p->next; } } } }}
int main() { GraphAdjList a; CreateAdjList(&a); DFSTraverse(a); system("pause");}
0 0
- 图——邻接表
- 图——邻接表
- 邻接表—DFS
- 图的存储——邻接表
- 数据结构—图之邻接表
- 图的实现——正邻接表&逆邻接表
- 图——操作用邻接表存储的图
- 图——邻接表(深度遍历,广度遍历)
- 图的存储三部曲——其二:邻接表
- 图的存储形式——邻接表
- 图的存储结构——邻接表的建立
- 图的存储结构——邻接表
- 数据结构—图的存储—邻接表和邻接矩阵
- 数据结构(C++)——图(邻接表)
- 数据结构——图的存储 邻接表
- 图的存储结构——邻接表
- 图的遍历(下)——邻接表
- 图的存储结构——邻接链表
- 第十六周项目5—基数排序
- 关于div填充整个页面的使用方法
- ajax如何同步请求做到验证
- 将Markdown文件转成word文件和PDF文件
- 第十六周 项目3 归并排序算法的改进
- 图——邻接表
- 第16周 排序(2)项目1-冒泡排序
- linux之sed用法
- 第16周项目1-验证算法(6)堆排序
- 虚拟继承和模板继承
- FMDB使用
- (第十六周项目1)验证算法(2)希尔排序
- 书摘《人人都是产品经理》——4年产品经理的思维书2
- Windows Tomcat自动启动