ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:21.12KB ,
资源ID:20931781      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20931781.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(求一个无向图G地连通分量地个数文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

求一个无向图G地连通分量地个数文档格式.docx

1、/ 图的邻接表存储表示 #define MAX_NAME 3 / 顶点字符串的最大长度+1 #define MAX_VERTEX_NUM 20#define STACK_INIT_SIZE 10 / 存储空间初始分配量 #define STACKINCREMENT 2 / 存储空间分配增量 typedef int InfoType; / 存放网的权值 typedef char VertexTypeMAX_NAME; / 字符串类型 typedef enumDG,DN,AG,ANGraphKind; / 有向图,有向网,无向图,无向网 typedef struct ArcNode int adj

2、vex; / 该弧所指向的顶点的位置 struct ArcNode *nextarc; / 指向下一条弧的指针 InfoType *info; / 网的权值指针) ArcNode; / 表结点 typedef struct VNode VertexType data; / 顶点信息 ArcNode *firstarc; / 第一个表结点的地址,指向第一条依附该顶点的弧的指针 VNode,AdjListMAX_VERTEX_NUM;/ 头结点 typedef struct AdjList vertices; int vexnum,arcnum; / 图的当前顶点数和弧数 int kind; /

3、图的种类标志 ALGraph;/ 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。int LocateVex(ALGraph G,VertexType u) int i; for(i=0;iG.vexnum;+i) if(strcmp(u,G.verticesi.data)=0) return i; return -1;/ 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造4种图)。int CreateGraph(ALGraph *G) int i,j,k; int w; / 权值 VertexType va,vb; ArcNode *p; printf(请输入图的类型(有向图

4、:0,有向网:1,无向图:2,无向网:3): ); scanf(%d,&(*G).kind);请输入图的顶点数和边数:(空格)n%d%d, &(*G).vexnum, &(*G).arcnum);请输入%d个顶点的值(小于%d个字符):n,(*G).vexnum,MAX_NAME); for(i = 0; i (*G).vexnum; +i) / 构造顶点向量 scanf(%s, (*G).verticesi.data); (*G).verticesi.firstarc = NULL; if(*G).kind = 1 | (*G).kind = 3) / 网 printf(请顺序输入每条弧(边

5、)的权值、弧尾和弧头(以空格作为间隔): else / 图 请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔): for(k = 0;k adjvex = j; if(*G).kind = 1 | (*G).kind = 3) / 网 p-info = (int *)malloc(sizeof(int); *(p-info) = w; elseinfo = NULL; / 图 nextarc = (*G).verticesi.firstarc; / 插在表头 (*G).verticesi.firstarc = p; if(*G).kind = 2) / 无向图或网,产生第二个表结点 p =

6、(ArcNode*)malloc(sizeof(ArcNode);adjvex = i; if(*G).kind = 3) / 无向网 p-info = (int*)malloc(sizeof(int); *(p- else / 无向图 nextarc = (*G).verticesj.firstarc; (*G).verticesj.firstarc = p; return 1;void Display(ALGraph G) / 输出图的邻接表G。 switch(G.kind) case DG:有向图n break; case DN:有向网n case AG:无向图n case AN:无向网

7、n%d个顶点:,G.vexnum); G.vexnum; +i)%s ,G.verticesi.data);n%d条弧(边):, G.arcnum); i+) p = G.verticesi.firstarc; while(p) if(G.kind adjvex.data); if(G.kind = DN) / 网 printf(:%d , *(p-info); else / 无向(避免输出两次) if(i adjvex) %s%s G.verticesp- if(G.kind = AN) / 网 printf(,*(p- p=p-nextarc;void FindInDegree(ALGra

8、ph G,int indegree) / 求顶点的入度。 i+) indegreei=0; / 赋初值 p=G.verticesi.firstarc; indegreep-adjvex+;typedef int SElemType; / 栈类型 typedef struct SqStack / 栈的顺序存储表示 SElemType *base; / 在栈构造之前和销毁之后,base的值为NULL SElemType *top; / 栈顶指针 int stacksize; / 当前已分配的存储空间,以元素为单位 SqStack; / 顺序栈int InitStack(SqStack *S) /

9、构造一个空栈S / 为栈底分配一个指定大小的存储空间 (*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if( !(*S).base ) exit(0); / 存储分配失败 (*S).top = (*S).base; / 栈底与栈顶相同表示一个空栈 (*S).stacksize = STACK_INIT_SIZE;/ 若栈S为空栈(栈顶与栈底相同的),则返回1,否则返回0。int StackEmpty(SqStack S) if(S.top = S.base) return 1; else return 0;i

10、nt Push(SqStack *S, SElemType e) / 插入元素e为新的栈顶元素。 if(*S).top - (*S).base = (*S).stacksize) / 栈满,追加存储空间 (*S).base = (SElemType *)realloc(*S).base, (*S).stacksize + STACKINCREMENT) * sizeof(SElemType); if( ! exit(0); / 存储分配失败 (*S).top = (*S).base+(*S).stacksize; (*S).stacksize += STACKINCREMENT; *(*S).

11、top)+=e; / 这个等式的+ * 优先级相同,但是它们的运算方式,是自右向左/ 若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。int Pop(SqStack *S,SElemType *e) if(*S).top = (*S).base) *e = *-(*S).top;/ 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序/ 列并返回1, 否则返回0。int TopologicalSort(ALGraph G) int i,k,count,indegreeMAX_VERTEX_NUM; SqStack S; FindInDegree(G,indegr

12、ee); / 对各顶点求入度indegree0.vernum-1 InitStack(&S); / 初始化栈 +i) / 建零入度顶点栈S if(!indegreei) Push(&S,i); / 入度为0者进栈 count=0; / 对输出顶点计数 while(!StackEmpty(S) / 栈不空 Pop(&S,&i); / 输出i号顶点并计数 +count; for(p=G.verticesi.firstarc;p;p=p-nextarc) / 对i号顶点的每个邻接点的入度减1 k=p-adjvex; if(!(-indegreek) / 若入度减为0,则入栈 S,k); if(cou

13、ntG.vexnum)此有向图有回路n无回路,此图的拓扑序nint main() ALGraph f;请选择有向图n CreateGraph(&f); Display(f); TopologicalSort(f); system(pause return 0;求一个无向图G的连通分量的个数/无向图的邻接表存储表示 #define MAX_NAME 3 / 顶点字符串的最大长度+1 #define TRUE 1#define FALSE 0int visitedMAX_VERTEX_NUM;/访问标志数组 / 第一个表结点的地址,指向第一条依附该顶点的弧的指针 请输入无向图的顶点数和边数: (*

14、G).verticesi.firstarc = p; / 无向图产生第二个表结点 p = (ArcNode*)malloc(sizeof(ArcNode); (*G).verticesj.firstarc = p;/ 输出图的邻接表G。void Display(ALGraph G) if(i void DFS(ALGraph G,int v)/从第v个顶点出发递归地深度优先遍历图G。 visitedv = TRUE;/访问第v个顶点 for(p=G.verticesv.firstarc; if(!visitedp-adjvex) DFS(G,p-adjvex);/对v尚未访问的邻接点递归调用D

15、FS void DFSTraverse(ALGraph G)/对图G作深度优先遍历。 int v,count=0; for (v=0;v+v) visitedv=FALSE;+v)visitedv) DFS(G,v); count+;/对连通分量进行计数 无向图G的连通分量的个数为:,count); DFSTraverse(f);五、运行输出结果:请选择有向图 0(空格)4 4请输入4个顶点的值(小于3个字符):1230 20 12 33 0有向图4个顶点:0 1 2 34条弧(边):0 1 0 22 33 0此有向图有回路请按任意键继续. . .5 4请输入5个顶点的值(小于3个字符):451 22 41 43 5无向图5个顶点:1 2 3 4 514 122435六、心得与体会:这次上机实验,难度较大,但是经过自己的不懈努力,收获还是颇多的。首先是对于图的有了更加清晰认识,其次,在程序设计上面也有了很大程度的提高。对于栈、队等也有了进一步的系统化认

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1