




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 实验目的 通过上机实验进一步掌握图的存储结构及基本操作的实现。2. 实验内容与要求 要求: 能根据输入的顶点、边/弧的信息建立图; 实现图中顶点、边/弧的插入、删除; 实现对该图的深度优先遍历;实现对该图的广度优先遍历。备注:单号基于邻接矩阵,双号基于邻接表存储结构实现上述操作。3. 数据结构设计逻辑结构:图状结构存储结构:顺序存储结构、链式存储结构4. 算法设计#include #include #include #define MAX_VERTEX_NUM 20typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;ArcNode;typedef struct VNodechar data2;/顶点就设置和书上V1等等一样吧ArcNode *firstarc;VNode,AdjListMAX_VERTEX_NUM;typedef structAdjList vertices;int vexnum,arcnum;ALGraph;typedef struct int dataMAX_VERTEX_NUM+10; int front; int rear;queue;int visitedMAX_VERTEX_NUM;queue q;int main()ALGraph G;int CreateUDG(ALGraph &G);int DeleteUDG(ALGraph &G);int InsertUDG(ALGraph &G);void BFSTraverse(ALGraph G, int (*Visit)(ALGraph G,ArcNode v);int PrintElement(ALGraph G,ArcNode v);void menu();void depthfirstsearch(ALGraph *g,int vi);void travel(ALGraph *g);void breadfirstsearch(ALGraph *g);int i;G.arcnum = G.vexnum = 0;while(1)menu();doprintf ( 请输入要进行的操作n );scanf (%d,&i);if (i6)printf(错误数字,请重新输入n);while (i6);switch (i)case 1: CreateUDG(G); system(pause); system(cls); break;case 2: DeleteUDG(G); system(pause); system(cls); break;case 3: InsertUDG(G); system(pause); system(cls); break;case 4: travel(&G); system(pause); system(cls); break;case 5: breadfirstsearch(&G); system(pause); system(cls); break;case 6: exit(0); break;return 1;void enterqueue(int v) q.dataq.rear=v; q.rear+;int deletequeue() int t; t=q.dataq.front; q.front+; return(t);int empty() if(q.front=q.rear) return 1; return 0;int LocateVex(ALGraph G,char node2)int i;for(i = 0 ; i G.vexnum ; i+)if(strcmp(G.verticesi.data,node)=0)return i;return -1;int CreateUDG(ALGraph &G)int LocateVex(ALGraph G,char node2);void PrintUDG(ALGraph G);int i,j,k;char node12,node22;ArcNode *p,*q;printf(请输入顶点数和弧数n);printf(例如:5,6n);scanf(%d,%d,&G.vexnum,&G.arcnum);printf(请输入各顶点n);for(i = 0 ; i G.vexnum ; i+)printf(第%d个n,i+1);scanf(%s,&G.verticesi);G.verticesi.firstarc = NULL;/这里开始构造边printf(请输入边的信息n);printf(例如:v1 v2n);for(i = 0 ; i adjvex = k;q-adjvex = j;p-nextarc = G.verticesj.firstarc;G.verticesj.firstarc = p;q-nextarc = G.verticesk.firstarc;G.verticesk.firstarc = q;PrintUDG(G);return 1;int DeleteUDG(ALGraph &G)int i,j;ArcNode *p,*q;char node2;int LocateVex(ALGraph G,char node2);void PrintUDG(ALGraph G);if(G.arcnum = 0)printf(请先生成图n);return 0;printf(请输入要删除的节点n);scanf(%s,&node);i = LocateVex(G,node);if(i = -1)printf(无此节点n);return 0;elseG.vexnum-;if(p = q = G.verticesi.firstarc) != NULL)G.arcnum-;p = p-nextarc;G.verticesi.firstarc = p;free(q);q = p;while(p != NULL)G.arcnum-;p = p-nextarc;G.verticesi.firstarc = p;free(q);q = p;for(j = 0 ; j = i)strcpy(G.verticesj.data , G.verticesj+1.data);G.verticesj.firstarc = G.verticesj+1.firstarc;if(G.verticesj.firstarc-nextarc != NULL)p = G.verticesj.firstarc;q = p-nextarc;if(p-adjvex = i)G.verticesj.firstarc = q;p = q;q = q-nextarc;continue;else if(p-adjvex i)p-adjvex-;while(q != NULL)if(q-adjvex = i)p-nextarc = q-nextarc;free(q);q = p-nextarc;else if(q-adjvex i)q-adjvex-;elsep = p-nextarc;q = q-nextarc;else if( (G.verticesj.firstarc-nextarc = NULL) & (G.verticesj.firstarc != NULL) )if( G.verticesj.firstarc-adjvex = i )G.verticesj.firstarc = NULL;PrintUDG(G);return 1;int InsertUDG(ALGraph &G)/默认一次插入一个节点吧,不然太麻烦int i,j,k,l;char node12,node22;ArcNode *p,*q;int LocateVex(ALGraph G,char node2);void PrintUDG(ALGraph G);if(G.arcnum = 0)printf(请先生成图n);return 0;printf(请输入插入节点的名称n);printf(WARNING:绝不可以和之前的节点重名!n);scanf(%s,&G.verticesG.vexnum.data);G.verticesG.vexnum.firstarc = NULL;printf(请输入需要插入的边的数目n);scanf(%d,&i);G.arcnum += i;G.vexnum+;printf(请输入边的信息n);printf(例如:v6 v2n);printf(WARNING:一定要包含刚加入的节点名称!n);for(j = 0 ; j adjvex = k;q-adjvex = l;p-nextarc = G.verticesl.firstarc;G.verticesl.firstarc = p;q-nextarc = G.verticesk.firstarc;G.verticesk.firstarc = q;PrintUDG(G);return 1;void depthfirstsearch(ALGraph *g,int vi) ArcNode *rear; printf(%st,g-verticesvi.data); visitedvi=1; rear=g-verticesvi.firstarc; while(rear!=NULL)&(!visitedrear-adjvex) depthfirstsearch(g,rear-adjvex); rear=rear-nextarc; void travel(ALGraph *g) int v; for(v=0;vvexnum;v+) if(!visitedv) depthfirstsearch(g,v);void breadfirstsearch(ALGraph *g) int v,t,i; ArcNode *rear;for(i = 0 ; i vexnum ; i+)visitedi = 0; for(v=0;vvexnum;v+) if(!visitedv) printf(%s,g-verticesv.data); visitedv=1; enterqueue(v); while(!empty() t=deletequeue(); rear=g-verticest.firstarc; while(rear!=NULL)&(!visitedrear-adjvex) printf(%st,g-verticesrear-adjvex.data); visitedrear-adjvex=1; enterqueue(rear-adjvex); rear=rear-nextarc; void menu() printf(*n);printf(* 作者:Dick *n);printf(* 信计1001 xxxxxxxxxx *n); printf(*MENU*n); printf(1 建立无向图n); printf(2 删除图中节点n); printf(3 插入节点n);printf(4 深
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代理业务活动方案
- 代表日活动方案
- 代购小铺活动方案
- 以旧换新消费活动方案
- 仪器展示活动方案
- 仲裁换届活动方案
- 企业供餐双十一活动方案
- 企业两在两同活动方案
- 企业保密宣传周活动方案
- 企业公司早餐会活动方案
- 2023年海南中考化学试题及答案
- 施工现场视频监控系统施工方案
- (正式版)JTT 1495-2024 公路水运危险性较大工程安全专项施工方案审查规程
- 《征兵入伍应征公民体格检查标准条文释义》
- 切花月季岩棉无土栽培技术
- 2023年教师招考中小学音乐学科专业知识考试真题及答案
- 社会稳定风险评估 投标方案(技术标)
- 血糖仪生产工艺流程
- 2024年-2024五届华杯赛小高年级组试题及答案
- 伤医事件应急预案演练
- XXX手机马达射频干扰问题解决分析过程
评论
0/150
提交评论