2015年上半年广东省数据理论入门.doc

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2015年上半年广东省数据理论入门

2015年上半年广东省数据理论入门 导读:就爱阅读网友为您分享以下“2015年上半年广东省数据理论入门”的资讯,希望对您有所帮助,感谢您对92的支持! 写出这种排序的算法。(注:双向起泡排序即相邻两趟排序向相反方向起泡)16、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。20分void Hospital(AdjMatrix w,int n)//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。{for (k=1;klt;=n;k++) //求任意两顶点间的最短路径for (i=1;ilt;=n;i++)for (j=1;jlt;=n;j++)if (w[i][k]+w[k][j]lt;w[i][j]) w[i][j]=w[i][k]+w[k][j];m=MAXINT; //设定m为机器内最大整数。for (i=1;ilt;=n;i++) //求最长路径中最短的一条。{s=0;for (j=1;jlt;=n;j++) //求从某村庄i(1lt;=ilt;=n)到其它村庄的最长路径。if (w[i][j]gt;s) s=w[i][j];if (slt;=m) {m=s; k=i;}//在最长路径中,取最短的一条。m记最长路径,k记出发顶点的下标。Printf(“医院应建在%d村庄,到医院距离为%d\n”,i,m);}//for}//算法结束对以上实例模拟的过程略。各行中最大数依次是9,9,6,7,9,9。这几个最大数中最小者为6,故医院应建在第三个村庄中,离医院最远的村庄到医院的距离是6。1、对图1所示的连通网G,请用Prim算法构造其最小生成树(每选取一条边画一个图)。17、矩阵中元素按行和按列都已排序,要求查找时间复杂度为O(m+n),因此不能采用常规的二层循环的查找。可以先从右上角(i=a,j=d)元素与x比较,只有三种情况:一是A[i,j]gt;x, 这情况下向j 小的方向继续查找;二是A[i,j]lt;x,下步应向i大的方向查找;三是A[i,j]=x,查找成功。否则,若下标已超出范围,则查找失败。void search(datatype A[ ][ ], int a,b,c,d, datatype x)//n*m矩阵A,行下标从a到b,列下标从c到d,本算法查找x是否在矩阵A中.{i=a; j=d; flag=0; //flag是成功查到x的标志while(ilt;=b amp;amp; jgt;=c)if(A[i][j]==x) {flag=1;break;}else if (A[i][j]gt;x) j--; else i++;if(flag) printf(“A[%d][%d]=%d”,i,j,x); //假定x为整型.else printf(“矩阵A中无%d 元素”,x);}算法search结束。[算法讨论]算法中查找x的路线从右上角开始,向下(当xgt;A[i,j])或向左(当xlt;A[i,j])。向下最多是m,向左最多是n。最佳情况是在右上角比较一次成功,最差是在左下角(A[b,c]),比较m+n次,故算法最差时间复杂度是O(m+n)。18、根据二叉排序树中序遍历所得结点值为增序的性质,在遍历中将当前遍历结点与其前驱结点 值比较,即可得出结论,为此设全局指针变量pre(初值为null)和全局变量flag,初值为true。若非二叉排序树,则置flag为false。#define true 1#define false 0typedef struct node{datatype data; struct node *llink,*rlink;} *BTree;void JudgeBST(BTree t,int flag)// 判断二叉树是否是二叉排序树,本算法结束后,在调用程序中由flag得出结论。{ if(t!=null amp;amp; flag){ Judgebst(t-gt;llink,flag);// 中序遍历左子树if(pre==null)pre=t;// 中序遍历的第一个结点不必判断else if(pre-gt;datalt;t-

文档评论(0)

raojun0010 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档