2014年吉林省C++语言版摘要
1、假设以邻接矩阵作为图的存储结构,编写算法判别在给定的有向图中是否存在一个简单有向回路,若存在,则以顶点序列的方式输出该回路(找到一条即可)。(注:图中不存在顶点到自己的弧)
有向图判断回路要比无向图复杂。利用深度优先遍历,将顶点分成三类:未访问;已访问但其邻接点未访问完;已访问且其邻接点已访问完。下面用0,1,2表示这三种状态。前面已提到,若dfs(v)结束前出现顶点u到v的回边,则图中必有包含顶点v和u的回路。对应程序中v的状态为1,而u是正访问的顶点,若我们找出u的下一邻接点的状态为1,就可以输出回路了。
void Print(int v,int start ) //输出从顶点start开始的回路。
{for(i=1;i<=n;i++)
if(g[v][i]!=0 && visited[i]==1 ) //若存在边(v,i),且顶点i的状态为1。
{printf(“%d”,v);
if(i==start) printf(“\n”); else Print(i,start);break;}//if
}//Print
void dfs(int v)
{visited[v]=1;
for(j=1;j<=n;j++ )
if (g[v][j]!=0) //存在边(v,j)
if (visited[j]!=1) {if (!visited[j]) dfs(j); }//if
else {cycle=1; Print(j,j);}
visited[v]=2;
}//dfs
void find_cycle() //判断是否有回路,有则输出邻接矩阵。visited数组为全局变量。
{for (i=1;i<=n;i++) visited[i]=0;
for (i=1;i<=n;i++ ) if (!visited[i]) dfs(i);
}//find_cycle
2、给定n个村庄之间的交通图,若村庄i和j之间有道路,则将顶点i和j用边连接,边上的Wij表示这条道路的长度,现在要从这n个村庄中选择一个村庄建一所医院,问这所医院应建在哪个村庄,才能使离医院最远的村庄到医院的路程最短?试设计一个解答上述问题的算法,并应用该算法解答如图所示的实例。20分
void Hospital(AdjMatrix w,int n)
//在以邻接带权矩阵表示的n个村庄中,求医院建在何处,使离医院最远的村庄到医院的路径最短。
{for (k=1;k<=n;k++) //求任意两顶点间的最短路径
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (w[i][k]+w[k][j]<w[i][j]) w[i][j]=w[i][k]+w[k][j];
m=MAXINT; //设定m为机器内最大整数。
for (i=1;i<=n;i++) //求最长路径中最短的一条。
{s=0;
for (j=1;j<=n;j++) //求从某村庄i(1<=i<=n)到其它村庄的最长路径。
if (w[i][j]>s) s=w[i][j];
if (s<=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算
2015年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2015年吉林省C++语言版摘要 1 、 (1)p->rchild (2)p->lchild (3)p->lchild (4)ADDQ(Q,p->...
2015年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2015年吉林省C++语言版摘要 1、我们用 l 代表最长平台的长度,用 k 指示最长平台在数组 b 中的起始位置...
2015年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2015年吉林省C++语言版摘要 1、我们用 l 代表最长平台的长度,用 k 指示最长平台在数组 b 中的起始位置...
2015年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2015年吉林省C++语言版摘要 1 、 (1)p->rchild (2)p->lchild (3)p->lchild (4)ADDQ(Q,p->...
2015年吉林省C++语言版摘要_日语学习_外语学习_教育专区。1、设T是一棵满二叉树,编写一个将T的先序遍历序列转换为后序遍历序列的递归算法。 2、设有一个数组...
2015年下半年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2015年下半年吉林省C++语言版摘要 1、若第n件物品能放入背包,则问题变为能否再从n-1件物品中选...
2013年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2013年吉林省C++语言版摘要 1、矩阵中元素按行和按列都已排序,要求查找时间复杂度为O(m+n),因此不能...
2010年吉林省C++语言版摘要_韩语学习_外语学习_教育专区。2010年吉林省C++语言版...2014年幼儿园教师资格考... 2014教师资格中学教育知... 相关文档推荐 暂无相关...
2014年吉林省C++语言版基础_数学_小学教育_教育专区。2014年吉林省C++语言版基础 1、请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用 llink-rlink 法...
2014年吉林省C++语言版纲要_韩语学习_外语学习_教育专区。2014年吉林省C++语言版纲要 1、设一棵树 T 中边的集合为{(A,B),(A,C),(A,D),(B,E),(C,F...

我要评论