2015年青海省数据概述摘要

发布时间:   来源:文档文库   
字号:
1因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。voidLongestPath(BiTreebt//求二叉树中的第一条最长路径长度
{BiTreep=bt,l[],s[];//l,s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点
intitop=0,tag[],longest=0;while(p||top>0
{while(p{s[++top]=ptag[top]=0;p=p->Lc;}//沿左分枝向下if(tag[top]==1//当前结点的右分枝已遍历
{if(!s[top]->Lc&&!s[top]->Rc//只有到叶子结点时,才查看路径长度if(top>longest{for(i=1;i<=top;i++l[i]=s[i];longest=top;top--;}//保留当前最长路径到l栈,记住最高栈顶指针,退栈}
elseif(top>0{tag[top]=1;p=s[top].Rc;}//沿右子分枝向下}//while(p!=null||top>0}//结束LongestPath
2、设有两个集合A和集合B,要求设计生成集合C=AB的算法,其中集合ABC用链式存储结构表示。
typedefstructnode{intdata;structnode*next;}lklist;voidintersection(lklist*ha,lklist*hb,lklist*&hc{
lklist*p,*q,*t;
for(p=ha,hc=0;p!=0;p=p->next
{for(q=hb;q!=0;q=q->nextif(q->data==p->databreak;
if(q!=0{t=(lklist*malloc(sizeof(lklist;t->data=p->data;t->next=hc;hc=t;}}}
3G=(V,EV={V1,V2,V3,V4,V5,V6,V7}E={,,,,,,,,}写出G的拓扑排序的结果。
G拓扑排序的结果是:V1V2V4V3V5V6V7
4因为后序遍历栈中保留当前结点的祖先的信息,用一变量保存栈的最高栈顶指针,每当退栈时,栈顶指针高于保存最高栈顶指针的值时,则将该栈倒入辅助栈中,辅助栈始终保存最长路径长度上的结点,直至后序遍历完毕,则辅助栈中内容即为所求。voidLongestPath(BiTreebt//求二叉树中的第一条最长路径长度
{BiTreep=bt,l[],s[];//l,s是栈,元素是二叉树结点指针,l中保留当前最长路径中的结点
intitop=0,tag[],longest=0;while(p||top>0

{while(p{s[++top]=ptag[top]=0;p=p->Lc;}//沿左分枝向下if(tag[top]==1//当前结点的右分枝已遍历
{if(!s[top]->Lc&&!s[top]->Rc//只有到叶子结点时,才查看路径长度if(top>longest{for(i=1;i<=top;i++l[i]=s[i];longest=top;top--;}//保留当前最长路径到l栈,记住最高栈顶指针,退栈}
elseif(top>0{tag[top]=1;p=s[top].Rc;}//沿右子分枝向下}//while(p!=null||top>0}//结束LongestPath5将顶点放在两个集合V1V2对每个顶点,检查其和邻接点是否在同一个集合中,如是,则为非二部图。为此,用整数12表示两个集合。再用一队列结构存放图中访问的顶点。intBPGraph(AdjMatrixg
//判断以邻接矩阵表示的图g是否是二部图。
{ints[];//顶点向量,元素值表示其属于那个集合(值12表示两个集合)intQ[];//Q为队列,元素为图的顶点,这里设顶点信息就是顶点编号。
intf=0,r,visited[];//fr分别是队列的头尾指针,visited[]是访问数组for(i=1;i<=n;i++{visited[i]=0;s[i]=0;}//初始化,各顶点未确定属于那个集合
Q[1]=1;r=1;s[1]=1;//顶点1放入集合S1while(f
{v=Q[++f];if(s[v]==1jh=2;elsejh=1;//准备v的邻接点的集合号if(!visited[v]
{visited[v]=1;//确保对每一个顶点,都要检查与其邻接点不应在一个集合中for(j=1,j<=n;j++
if(g[v][j]==1{if(!s[j]{s[j]=jh;Q[++r]=j;}//邻接点入队列elseif(s[j]==s[v]return(0;}//非二部图}//if(!visited[v]}//while
return(1;}//是二部图
[算法讨论]题目给的是连通无向图,若非连通,则算法要修改。
6、二部图(bipartitegraphG=VE)是一个能将其结点集V分为两不相交子集V1V2=V-V1的无向图,使得:V1中的任何两个结点在图G中均不相邻,V2中的任何结点在图G中也均不相邻。1.请各举一个结点个数为5的二部图和非二部图的例子。2请用CPASCAL编写一个函数BIPARTITE判断一个连通无向图G是否是二部图,并分析程序的时间复杂度。设G用二维数组A来表示,大小为n*nn为结点个数)。请在程序中加必要的注释。若有必要可直接利用堆栈或队列操作。

本文来源:https://www.2haoxitong.net/k/doc/34bc83efbcd126fff6050b05.html

《2015年青海省数据概述摘要.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式