数据结构
①邻接矩阵法存储 #define MaxVertexNum 100 //最大顶点数 typedef char VertexType; //顶点类型定义 typedef int EdgeType; //边类型定义 typed struct { VertexType Vex[MaxVertexNum]; //顶点表 EdgeType Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵 int vexnum,arcnum; //顶点数、弧数 } MGraph; ②邻接表法存储 #define MaxVertexNum 100 //最大顶点数 typedef struct ArcNode { int adjvex; //弧所指向的顶点位置 struct ArcNode * next; //指向下一条弧的指针 } ArcNode; typedef struct VNode //表结点 { VertexType data; //顶点信息 ArcNode * first; //指向第一条依附于该顶点的弧的指针 } VNode,AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; //邻接表 int vexnum,arcnum; //图的顶点数和弧数 } ALGraph;1、图的初始化(邻接矩阵)
void CreateGraph(MGraph &G) { int i,j,k,weight; int gn,ge; printf("请输入顶点数和边数:"); scanf("%d %d",&Gn,&Ge); printf("请输入顶点:"); for(i = 0; i < Gn; i++) scanf("%d",&vexs[i]); for(i = 0; i < Ge; i++) { for(j = 0; j < Gn; j++) { G.AdjMatrix[i][j] = infinity; } } printf("请输入边的顶点下标i,j以及权重w :"); for(k = 0; k < Ge; k++) { scanf("%d %d %d",&i,&j,&weight); G.AdjMatrix[i][j] = weight; G.AdjMatrix[i][j] = G.AdjMatrix; } }2、广度优先遍历
bool visit[MAX_VERTEX_NUM]; void BFST(Graph G) //访问标记数组 { for(i = 0; i < G.vexnum; i++) visit[i] = false; //访问标记数组初始化 InitQueue(Q); //初始化辅助队列 for(i = 0; i < G.vexnum; i++) //从0号结点开始遍历 { if(!visit[i]) BFS(G,i); } } void BFS(Graph G,int v) { visit(v); //访问初始结点v visited(v) = true; //置访问标记 EnQueue(Q,v); while(!IsEmpty(Q)) { DeQueue(Q,v); //检测v所有邻接结点 for(w = FirstNeighbor(G,v),w >= 0; w = NextNeighbor(G,v,w)) if(!visited[w]) //w为v当前未访问的邻接结点 { visit(w); visited[w] = true; EnQueue(Q,w); } } }3、深度优先遍历
bool visit[MAX_VERTEX_NUM]; void DFST(Graph G) //访问标记数组 { for(i = 0; i < G.vexnum; i++) visit[i] = false; //访问标记数组初始化 for(i = 0; i < G.vexnum; i++) //从0号结点开始遍历 { if(!visit[i]) DFS(G,i); } } void DFS(Graph G,int v) { visit(v); //访问初始结点v visited(v) = true; //置访问标记 for(w = FirstNeighbor(G,v),w >= 0; w = NextNeighbor(G,v,w)) if(!visited[w]) DFS(G,w); //w为v当前未访问的邻接结点 }4、计算顶点i的出度(邻接矩阵)
int getOutDegree(MGraph G,VertexType i) { int j,sum = 0; for(j = 0; j < G.vernum; j++) { if(AdjMatrix[i][j] == 1) { sum++; } } return sum; }5、计算顶点i的入度(邻接矩阵)
int getInDegree(MGraph G,VertexType i) { int j,sum = 0; for(j = 0; j < G.vernum; j++) { if(AdjMatrix[j][i] == 1) { sum++; } } return sum; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)