算法与数据结构_第1页
算法与数据结构_第2页
算法与数据结构_第3页
算法与数据结构_第4页
算法与数据结构_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数据结构与算法数据结构与算法 课程设计课程设计 题 目:集合的计算 表达式转换问题 :八皇后问题 :构造使 n 个城市连接的最小生成树 目目 录录摘摘 要要.3一集合的计算一集合的计算.41.采用类语言定义相关的数据类型.42.算法设计.43.函数的调用关系图.44.调试分析.45.测试结果.56.源程序(带注释).5二表达式转换问题二表达式转换问题.61.采用类语言定义相关的数据类型.62.算法设计.63.函数的调用关系图.64.调试分析.65.测试结果.66.源程序(带注释).6三八皇后问题三八皇后问题.71.采用类语言定义相关的数据类型.72.算法设计.73函数的调用关系图.74.调试

2、分析.75.测试结果.76.源程序(带注释).7四构四构造造可以使可以使 N 个城市连接的最个城市连接的最小小生成树生成树.71.采用类语言定义相关的数据类型.72.算法设计.73函数的调用关系图.74.调试分析.75.测试结果.76.源程序(带注释).7总总 结结.8参考文献参考文献.9致致 谢谢.104摘摘 要要1. 通过程序实现两个集合的交并差运算和一个集合的冥集运算2. 输入一个中缀表达式,通过程序输出一个后缀表达式3. 通过程序将八个皇后放置在国际象棋棋盘的无冲突的位置上的算法,并给出所有的解4. 给定一个地区的 n 个城市间的距离网,用 Prim 算法或 Kruskal 算法建立最

3、小生成树,并计算得到的最小生成树的代价关键词: 线性表;链栈;列队;树一集合的计算集合的计算设计一个程序,实现两个集合的并集、交集、差集、显示输出等,要求结果集合中的元素不重复;实现一个集合的幂集的求解。1.采用类语言定义相关的数据类型typedef int ElemType;typedef struct/线性表的结构体ElemType dataMAXSIZE;int length;SqList;2.算法设计A.初始化三个线性表,第一个和第二个线性表分别为两个集合,第三个线性表为计算后的集合void InitList(SqList *L)/初始化线性表L-data=NULL;L-length=

4、0;5B.求并集,把集合 1 和集合 2 中的元素不重复的放入集合 2 中void operate4(SqList *L1,SqList *L2,SqList *L3)/求并集int i,j;ElemType res_date;InitList(L3);/初始化 L3for(i=0;ilength;i+)/将属于 L1 同时也属于 L2 的元素赋值给 L3res_date=L1-datai;for(j=0;jlength;j+)if(res_date=L2-dataj)L3-dataL3-length=res_date;L3-length+;break;C.求交集,把即存在于集合 1 又存在于

5、集合 2 的元素放入集合 3 中D.求差集,把存在于集 1 合 1 但不存在于集合 2 的元素放入集合 3 中E.求该集合的任意个元素的组合,所有的组合加上空集即是该集合的冥集3.函数的调用关系图main()InitList()operate1()operate2()operate3()operate4()集64.调试分析a、输入的数据类型不统一。解决办法:对输入的数据进行筛选和检验b、算法的时间复杂度为 o(n2)c、算法的空间复杂度为 o(n2)5.测试结果例:集合 1 为1,3,6,9,11集合 2 为2,4,5,9,12求并集结果:求差集结果:76.源程序(带注释)/*实现两个集合的并

6、集、交集、差集,实现一个集合的幂集的求解。程序中的线性表 L1、L2 分别为集合 L1、L2,线性表 L3 为计算后的集合*/#include#define MAXSIZE 10/线性表的最大长度typedef int ElemType;typedef struct/线性表的结构体ElemType dataMAXSIZE;int length;SqList;/线性表的操作函数/void InitList(SqList *L)/初始化线性表L-data=NULL;L-length=0;int ListInsert(SqList *L,int i,ElemType e) /向表中插入元素int k

7、;if(ilength)/如果不在表尾插入8for(k=L-length-1;k=i-1;k-)L-datak+1=L-datak;L-datai-1=e;L-length+;return 1;else/如果在表尾插入L-datai-1=e;L-length+;return 1;void ErgList(SqList *L) /遍历线性表并依次返回元素int j;ElemType res_date;for(j=0;jlength;j+)res_date=L-dataj;printf(%4d,res_date);printf(n);/该程序的操作函数/int menu()/菜单函数int m_c

8、ho;system(cls);printf(-MENU-n);printf(1-给集合 L1 和集合 L2 添加元素n);printf(2-查看集合 L1,L2n);printf(3-求 L1 与 L2 的并集n);printf(4-求 L1 与 L2 的交集n);printf(5-求 L1 与 L2 的差集n);printf(6-求 L1 的冥集n);printf(7-求 L2 的冥集n);printf(8-退出系统n);printf(-n);printf(-请输入序号: bb);scanf(%d,&m_cho);if(1=m_cho&m_cho=6)return m_cho

9、;elsesystem(cls);exit();return 0;9void operate1(SqList *L1,SqList *L2)/处理序号 1int i;ElemType ins_e5;printf(请输入集合 L1 中的元素(仅限整数):n);for(i=0;i5;i+)/接受集合 L1 的元素scanf(%d,&ins_ei);ListInsert(L1,i+1,ins_ei);printf(请输入集合 L2 中的元素(仅限整数):n);for(i=0;i5;i+)/接受集合 L2 的元素scanf(%d,&ins_ei);ListInsert(L2,i+1,i

10、ns_ei);void operate2(SqList *L1,SqList *L2)/处理序号 2printf(-查看元素-n);printf(集合 L1:);ErgList(L1);printf(集合 L2:);ErgList(L2);printf(-n);void operate3(SqList *L1,SqList *L2,SqList *L3) /处理序号 3int i,j;InitList(L3);/初始化 L3*L3=*L1;for(i=0;ilength;i+)/将 L2 中的元素放入 L3 中且无重复元素for(j=0;jlength;j+)if(L3-dataj=L2-da

11、tai)/选择存在于 L2 但不存在于L3 的元素break;elseif(j=L3-length-1)ListInsert(L3,L3-length+1,L2-datai);elsecontinue;printf(-求并集结果-n);ErgList(L3);10printf(-n);void operate4(SqList *L1,SqList *L2,SqList *L3)/处理序号 4int i,j;ElemType res_date;InitList(L3);/初始化 L3for(i=0;ilength;i+)/将属于 L1 同时也属于 L2 的元素赋值给 L3res_date=L1-

12、datai;for(j=0;jlength;j+)if(res_date=L2-dataj)L3-dataL3-length=res_date;L3-length+;break;printf(-求交集结果-n);ErgList(L3);printf(-n);void operate5(SqList *L1,SqList *L2,SqList *L3)/处理序号 5int i,j;ElemType res_date;InitList(L3);/初始化 L3for(i=0;ilength;i+)/将属于 L1 但不属于 L2 的元素赋值给 L3res_date=L1-datai;for(j=0;j

13、length;j+)if(res_date=L2-dataj)break;elseif(j=L2-length-1)L3-dataL3-length=res_date;L3-length+;elsecontinue;printf(-求差集结果-n);ErgList(L3);11printf(-n);void operate6(SqList *L1,SqList *L3) /处理序号 6void operate7(SqList *L2,SqList *L3) /处理序号 7int main()int c;char res;SqList L1,L2,L3;/定义线性表 L1,L2,L3InitLi

14、st(&L1);/初始化线性表InitList(&L2);InitList(&L3);start: c=menu();switch(c)/处理所选的操作case 1:operate1(&L1,&L2);printf(元素输入成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);scanf(%c,&res);goto start;case 2:operate2(&L1,&L2);printf(元素查看成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%

15、c,&res);scanf(%c,&res);goto start;case 3:operate3(&L1,&L2,&L3);printf(L1 与 L2 求并集成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);scanf(%c,&res);goto start;case 4:operate4(&L1,&L2,&L3);printf(L1 与 L2 求交集成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);12sc

16、anf(%c,&res);goto start;case 5:operate5(&L1,&L2,&L3);printf(L1 与 L2 求差集成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);scanf(%c,&res);goto start;case 6:operate6(&L1,&L3);printf(求 L1 的冥集成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);scanf(%c,&res);goto start

17、;case 7:operate7(&L2,&L3);printf(求 L2 的冥集成功!0_0n);printf(按 ENTER 键返回. . .);scanf(%c,&res);scanf(%c,&res);goto start;return 0;二表达式转换问题表达式转换问题请编写一个读取中缀表达式并生成后缀表达式的程序。1.采用类语言定义相关的数据类型typedef struct StackNode/结点结构体char data;struct StackNode *next;StackNode,*LinkStackPtr;typedef struct Li

18、nkStack/链栈结构体LinkStackPtr top;int count;LinkStack;132.算法设计先通过栈将所输入的数据进行存储逐个判断运算符的优先级int Priority(DataType op)switch(op)case (:case #:return(0);case -:case +:return(1);case *:case /:return(2);然后再通过栈将数字与运算符输出14函数的调用关系图读入中缀表达式,#结束调用转换函数将中缀表达式转成后缀表达式队列元素依次出队,得到后缀表达式输出显示初始化队列4.调试分析2. 调试中遇到的问题及对问题的解决方法3.

19、问题:得到的后缀表达式不正确4. 解决办法:使用栈把优先级低的运算符先保存下来5. 时间复杂度:O(n)6. 空间复杂度:O(n)5.测试结果读入中缀表达式,#结束OutPut()ChangeExp()初始化栈156.源程序(带注释)/求运算符优先级函数int Priority(DataType op)switch(op)case (:case #:return(0);case -:case +:return(1);case *:case /:return(2);/*转换函数将中缀表达式转换成后缀表达式*/void ChangeExp(SeqQueue *Q)SeqStack OS;/运算符栈

20、char c,t;SeqStack *S;S = &OS;InitStack(S);/初始化栈Push(S,#);/压入栈底元素#do/扫描中缀表达式c = getchar();switch(c)case :break;/去除空格符case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:EnQueue(Q,c);break;case (: Push(S,c);break;case ):case #:dot = Pop(S);16if(t != ( & t != #) EnQueue(Q,t);while(t

21、!= ( & S-top != -1);break;case +:case -:case *:case /:while(Priority(c) = Priority(GetTop(S)t = Pop(S);EnQueue(Q,t);Push(S,c);break;/EndSwitchwhile(c!=#);/以#号结束表达式扫描三八皇后问题八皇后问题要求编写程序实现将八个皇后放置在国际象棋棋盘的无冲突的位置上的算法,并给出所有的解。 提示:在国际象棋上放置皇后时,任何一个皇后的水平、竖直和斜 45 都不能有另一个皇后。解决该问题采用逐次试探的方法,即采用递归调用 putchess 函数

22、的方法。首先将第一个皇后放于第一行第一列,然后开始向下一行递归。每一步递归中,首先检测待放置位置是否与已放置的皇后冲突,如不冲突,则进行下一行的放置,否则,选择该行的下一个位置进行检测。如整行的位置都冲突,则回到上一行,重新选择位置。1.采用类语言定义相关的数据类型typedef char VerT;#define MaxSize 100#define MaxVertices 10#define MaxWeight 10000#define N 7typedef int DataType;typedef struct17DataType listMaxSize;int size;SeqList

23、;2.算法设计A、 数据初始化。B、 从 n 列开始摆放第 n 个皇后(因为这样便可以符合每一竖列一个皇后的要求) ,先测试当前位置(n,m)是否等于 0(未被占领) 。如果是,摆放第 n 个皇后,并宣布占领(记得姚横列竖列斜列一起设置) ,接着进行递归;如果不是,测试下一个位置(n,m+1) ,但是如果当 n8 时,便打印出结果。E、输出函数我使用 printf 输出,运行形式为:第 m 种方法为:* * * * * * * * 183函数的调用关系图194.调试分析在完整程序调试时遇到几个小问题,后经细心改正后才把调试工作做完。例如:当用 printf 输出时,出现了一些错误,几经调试后,

24、发现原来是缺少了stdio.h 这样一个头文件,添加了头文件后, 还出现了一些问题,逻辑错误导致程序死循环或不循环或循环一小部分,但是编译时却没有错误,就是没有正确的输出答案,一开始我也不知道是怎么回事,通过和同学的交流,发现是逻辑错误,经过改正后,程序终于可以运行了.时间复杂度 O(n2)空间复杂度(1),205.测试结果6.源程序(带注释)#include #include #include #include 21#include #define QUEENS 8int iCount = 0; /!记录解的序号的全局变量。int SiteQUEENS; /!记录皇后在各行上的放置位置的全局

25、数组。void Queen(int n); /!递归求解的函数。void Output();/!输出一个解。int IsValid(int n); /!判断第 n 个皇后放上去之后,是否有冲突。void main() /*-Main:主函数。-*/ system(title 叶青-递归算法八皇后问题 );cout 八皇后的解法:endl;cout -endl; Queen(0); /!从第 0 行开始递归试探。 getch();/!按任意键返回。 void Queen(int n) /*-Queen:递归放置第 n 个皇后,程序的核心!-*/ int i; if(n = QUEENS) /!参

26、数 n 从 0 开始,等于 8 时便试出了一个解,将它输出并回溯。 Output(); return; for(i = 1 ; i = QUEENS ; i+) /!n 还没到 8,在第 n 行的各个行上依次试探。 Siten = i; /!在该行的第 i 行上放置皇后。 if(IsValid(n) /!如果放置没有冲突,就开始下一行的试探。 Queen(n + 1); int IsValid(int n) /*-IsValid:判断第 n 个皇后放上去之后,是否合法,即是否无冲突。-*/ int i; for(i = 0 ; i n ; i+) /!将第 n 个皇后的位置依次于前面 n1 个

27、皇后的位置比较。 if(Sitei = Siten) /!两个皇后在同一列上,返回 0。 return 0; if(abs(Sitei - Siten) = (n - i) /!两个皇后在同一对角线上,返回 0。 return 0; return 1; /!没有冲突,返回 1。 void Output()/*-Output:输出一个解,即一种没有冲突的放置方案。-*/ int i; printf(No.%-5d , +iCount); /!输出序号。 22 for(i = 0 ; i QUEENS ; i+)/!依次输出各个行上的皇后的位置,即所在的列数。 printf(%d , Sitei)

28、; printf(n); 四四. .构造可以使构造可以使 n n 个城市连接的最小生成树个城市连接的最小生成树给定一个地区的 n 个城市间的距离网,用 Prim 算法或 Kruskal 算法建立最小生成树,并计算得到的最小生成树的代价。(4)要求:1)城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值.要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。2)表示城市间距离网的邻接矩阵(要求至少 6 个城市,10 条边);3)最小生成树中包括的边及其权值,并显示得到的最小

29、生成树的代价。1.采用类语言定义相关的数据类型#ifndef ADJACENCYMATRIXED/防止该头文件被重复引用#define ADJACENCYMATRIXED/而引起的数据重复定义#define INFINITY 32767/最大值#define MAX_VERTEX_NUM20 /最大顶点个数typedef intVRType;/权值,即边的值typedef charInfoType; /附加信息的类型,后面使用时会定义成一个指针typedef charVertexTypeMAX_VERTEX_NUM; /顶点类型typedef enum DG=1, DN, UDG, UDN G

30、raphKind; /有向图,有向网,无向图,无向网typedef struct ArcCellVRTypeadj;/VRType 是顶点关系类型。对无权图,用 1 或 0 表示相邻否;对带权图,则为权值类型。InfoType* info;/该弧关系信息的指针ArcCell, AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;23typedef structVertexType vexsMAX_VERTEX_NUM;/顶点向量AdjMatrix arcs;/邻接矩阵intvexnum, arcnum;/图的当前顶点数和弧数GraphKind kind;/图的种类标志M

31、Graph;typedef struct/普里姆算法辅助数组的定义VertexType adjvex;VRTypelowcost;closedgeMAX_VERTEX_NUM;#endif/结束 if2.算法设计* MiniSpanTree_PRIM*void MiniSpanTree_PRIM(MGraph G, VertexType u)定义辅助数组:closedge closeEdge;初始化:strcpy(closeEdgej.adjvex, u);closeEdgej.lowcost = G.arcskj.adj;for (i=1; i closeEdgei.lowcost)返回该城

32、市在 G 中的位置3函数的调用关系图创建用邻接矩阵表示的城市道路网输入城市数 G.vexnum、道路数 G.arcnum输入城市名 G.vexsi输入表示道路的两个城市及道路值G.arcsij.adj返回 OKPrim 算法化辅助数组 closeEdgefor (i=1; iG.vexnum; +i)求下一个城市 k = Minimum(closeEdge, G.vexnum)输出找到的道路25标记城市,避免重复输出总耗费4.调试分析本函数的主要功能是对无向网进行邻接矩阵的初始化。构造这种具有 n 个顶点和 e 条边的无向网时,关键需要考虑其时间复杂度 O(n+e*n),其中对邻接矩阵 G.a

33、rcs 的初始化花费了 O(n)的时间。Prim 算法的思路是逐步将城市纳入生成树中,这里面的关键步骤是要找到下一个城市。于是通过讨教别人,写了 Status Minimum(closedge closeEdge, int n)函数,这样就可以在辅助数组中找到道路值最小的道路的两点城市了。5.测试结果266.源程序(带注释)#include#include#include/#include typedef char VerT;#define MaxSize 100#define MaxVertices 10#define MaxWeight 10000#define N 7typedef in

34、t DataType;typedef structDataType listMaxSize;int size;SeqList;void ListInitiate(SeqList *L)L-size=0;27int ListLength(SeqList L)return L.size;int ListInsert(SeqList *L,int i,DataType x)int j;if(L-size=MaxSize)printf(顺序表已满无法插入!n);return 0;else if(iL-size)printf(参数 i 不合法!n);return 0;else for(j=L-size;

35、ji;j-) L-listj=L-listj-1; L-listi=x; L-size+; return 1;int ListDelete(SeqList *L,int i,DataType*x)int j;if(L-size=0)printf(顺序表已空无数据可删!n);return 0;else if(iL-size-1)printf(参数 i 不合法!n);return 0;else28*x=L-listi;for(j=i;jsize;j+) L-listj=L-listj+1; L-size-; return 1;int ListGet(SeqList L,int i,char*x)

36、if(iL.size-1)printf(参数 i 不合法!n);return 0; else *x=L.listi; return 1; typedef structSeqList Vertices; /* 存放结点的顺序表 */int edgeMaxVerticesMaxVertices; /* 存放边的邻结矩阵地 */int numOfEdges; /* 边的条数 */AdjMGraph; /* 图的结构体定义 */void Initiate(AdjMGraph *G, int n) /* 初始化 */int i,j;for(i=0;in;i+)for(j=0;jedgeij=0;else

37、 G-edgeij=MaxWeight;29G-numOfEdges=0; /* 边的条数置为 0 */ListInitiate(&G-Vertices); /*顺序表初始化 */void InsertVertex(AdjMGraph *G, DataType vertex) /* v 在图 G中插入结点 vertex */ListInsert(&G-Vertices, G-Vertices.size,vertex); /* 顺序表尾插入 */void InsertEdge(AdjMGraph *G, int v1,int v2,int weight)/*在图 G 中插入边,边

38、的权为 weight */if(v1G-Vertices.size | v2G-Vertices.size|v2edgev1v2=weight;G-numOfEdges+;void DeleteEdge(AdjMGraph *G,int v1,int v2)/*在图 G 中删除边 */if(v1G-Vertices.size | v2G-Vertices.size | v1=v2)printf(掺数 v1 或 v2 越界出错! n);exit(1);if(G-edgev1v2=MaxWeight | v1=v2)printf(该边不存在!n);exit(0);G-edgev1v2=MaxWei

39、ght;G-numOfEdges-;30void DeleteVertex(AdjMGraph *G,int v) /*删除结点 V*/int n=ListLength(G-Vertices),i,j;DataType x;for(i=0;in;i+) /*计算删除后的边数*/for(j=0;jedgeij0 & G-edgeijnumOfEdges-; /*计算被删除边*/for(i=v;in;i+) /*删除第v 行*/for(j=0;jedgeij=G-edgei+1j;for(i=0;in;i+) /*删除第 v列*/for(j=v;jedgeij=G-edgeij+1;Lis

40、tDelete(&G-Vertices,v,&x);int GetFirstVex(AdjMGraph G,int v)/*在图 G 中寻找序号为 v 的结点的第一个邻接结点*/*如果这样的邻接结点存在,返回该邻接结点的序号;否则,返回-1*/int col;if(vG.Vertices.size)printf(参数 v1 越界出错!n);exit(1);for(col=0;col0 & G.edgevcolMaxWeight) return col;return -1;int GetNextVex(AdjMGraph G,int v1,int v2)/*在图 G 中寻

41、找 v1 结点的邻接结点 v2 的下一个邻接结点*/*如果这样的邻接结点存在,返回该邻接结点的序号;否则,返回-1*/*v1 和 v2 都是相应结点的序号*/31 int col; if(v1G.Vertices.size | v2G.Vertices.size) printf(参数 v1 或 v2 越界出错!n); exit(1); for(col=v2+1;col0 & G.edgev1colMaxWeight) return col; return -1;typedef structint row; /*行下标*/int col; /*列下标*/int weight; /*权值*

42、/RowColWeight; /*边信息结构体定义*/void CreatGraph(AdjMGraph *G,char V,int n,RowColWeight E,int e)/*在图 G 中插入 v 个结点信息 V 和 e 条边信息 E*/int i,k;Initiate(G,n); /*结点顺序表初始化*/for(i=0;in;i+)InsertVertex(G,Vi); /*结点插入*/for(k=0;ke;k+)InsertEdge(G,Ek.row,Ek.col,Ek.weight); /*边插入*/typedef structVerT vertex;int weight;Min

43、SpanTree;void Prim(AdjMGraph G, MinSpanTree closeVertex)/*用普里姆算法建立带权图 G 的最小生成树 closeVertex*/VerT x;int n=G.Vertices.size,minCost;int *lowCost=(int *)malloc(sizeof(int)*n);int i,j,k;32printf(请输入第一个城市:); scanf(%d,&j);for(i=0;in;i+) /*初始化*/ lowCosti=G.edgeji;/*从结点 j 出发构造最小生成树*/ ListGet(G.Vertices,j

44、,&x); /*取结点 j*/ closeVertexj.vertex=x; /*保存结点 j*/ lowCostj=-1; /*标记结点 j*/for(i=1;in;i+)/*结点寻找当前最小权值的边所对应的弧头 K*/minCost=MaxWeight;for(j=0;jn;j+) if(lowCostj0) minCost=lowCostj; k=j;ListGet(G.Vertices,k,&x); /*取弧头结点 K*/closeVertexi.vertex=x; /*保存弧头结点 K*/closeVertexi.weight=minCost; /*保存相应的权值*/

45、lowCostk=-1; /*标记结点 K*/*根据加入集合 U 的结点 K 修改 lowCost 中的数值*/for(j=0;jn;j+)if(G.edgekjlowCostj)lowCostj=G.edgekj;int main(void)while(1)33AdjMGraph g;char a=A,B,C,D,E,F,G;RowColWeight rcw=0,1,35,1,0,35,0,2,60,2,0,60,1,3,65,3,1,65,1,4,40,4,1,40,2,3,55,3,2,55,2,6,45,6,2,45,3,4,50,4,3,50,3,5,30,5,3,30,3,6,25

46、,6,3,25,4,5,70,5,4,70;int n=7,e=20; int i,j;int worth=0;MinSpanTree closeVertex7;CreatGraph(&g,a,n,rcw,e);printf(*n);printf( 欢迎来到城市最小生成树系统n);printf( 0-An);printf( 1-Bn);printf( 2-Cn);printf( 3-Dn);printf( 4-En);printf( 5-Fn);printf( 6-Gn);printf(*nn);printf(结点集合为:);for(i=0;ig.Vertices.size;i+)printf(%c ,g.Vertices.listi);printf(n);printf(权值集合为:n);for(i=0;ig.Vertices.size;i+)for(j=0;jg.Vertices.size;j+)printf(%5d ,g.edgeij);printf(n);print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论