求大神,给图G,若两个结点不与同一个结点邻接返回true的伪代码格式

离散数学第七章_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
离散数学第七章
图​论​p​p​t
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:698.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢poj-1236--一起学习强连通分量2 - zhang的专栏
- 博客频道 - CSDN.NET
上一篇介绍过题目大意和kosaraju算法
本篇介绍tarjan算法。
引用一下讲解:
此算法以一个作为输入,并按照所在的强连通分量给出其顶点集的一个。图中的每个结点只在一个强连通分量中出现,即使是在有些结点单独构成一个强连通分量的情况下(比如图中出现了树形结构或孤立结点)。
算法的基本思想如下:任选一结点开始进行(若深度优先搜索结束后仍有未访问的结点,则再从中任选一点再次进行)。搜索过程中已访问的结点不再访问。搜索树的若干子树构成了图的强连通分量。
结点按照被访问的顺序存入中。从搜索树的子树返回至一个结点时,检查该结点是否是某一强连通分量的根结点(见下)并将其从栈中删除。如果某结点是强连通分量的根,则在它之前出栈且还不属于其他强连通分量的结点构成了该结点所在的强连通分量。
算法的关键在于如何判定某结点是否是强连通分量的根。注意“强连通分量的根”这一说法仅针对此算法,事实上强连通分量是没有特定的“根”的。在这里根结点指深度优先搜索时强连通分量中首个被访问的结点。
为找到根结点,我们给每个结点v一个深度优先搜索标号v.index,表示它是第几个被访问的结点。此外,每个结点v还有一个值v.lowlink,表示从v出发经有向边可到达的所有结点中最小的index。显然v.lowlink总是不大于v.index,且当从v出发经有向边不能到达其他结点时,这两个值相等。v.lowlink在深度优先搜索的过程中求得,v是强连通分量的根当且仅当v.lowlink
= v.index。
algorithm tarjan is
input: 图 G = (V, E)
output: 以所在的强连通分量划分的顶点集
index := 0
S := empty
// 置栈为空
for each v in V do
if (v.index is undefined)
strongconnect(v)
function strongconnect(v)
// 将未使用的最小index值作为结点v的index
v.index := index
v.lowlink := index
index := index + 1
// 考虑v的后继结点
for each (v, w) in E do
if (w.index is undefined) then
// 后继结点w未访问,递归调用
strongconnect(w)
v.lowlink := min(v.lowlink, w.lowlink)
else if (w is in S) then
// w已在栈S中,亦即在当前强连通分量中
v.lowlink := min(v.lowlink, w.index)
// 若v是根则出栈,并求得一个强连通分量
if (v.lowlink = v.index) then
start a new strongly connected component
w := S.pop()
add w to current strongly connected component
until (w = v)
output the current strongly connected component
end function
变量index是深度优先搜索的结点计数器。S是栈,初始为空,用于存储已经访问但未被判定属于任一强连通分量的结点。注意这并非一个一般深度优先搜索的栈,结点不是在以它为根的子树搜索完成后出栈,而是在整个强连通分量被找到时。
最外层循环用于查找未访问的结点,以保证所有结点最终都会被访问。strongconnect进行一次深度优先搜索,并找到结点v的后继结点构成的子图中所有的强连通分量。
当一个结点完成递归时,若它的lowlink仍等于index,那么它就是强连通分量的根。算法将在此结点之后入栈(包含此结点)且仍在栈中的结点出栈,并作为一个强连通分量输出。
复杂度:对每个结点,过程strongconnect只被调用一次;整个程序中每条边最多被考虑两次。因此算法的运行时间关于图的边数是线性的,即。判断结点v'是否在栈中应在常数时间内完成,例如可以对每个结点保存一个是否在栈中的标记。同一个强连通分量内的结点是无序的,但此算法具有如下性质:每个强连通分量都是在它的所有后继强连通分量被求出之后求得的。因此,如果将同一强连通分量收缩为一个结点而构成一个,这些强连通分量被求出的顺序是这一新图的的逆序。
#include &stdio.h&
#include &stdlib.h&
#include &string.h&
#define nMax 110
#define Min(x,y) (x&y?x:y)
int map[nMax][nMax];
int belong[nMax];
int DFN[nMax],Low[nMax],stack[nMax];
bool inStack[nMax];
int n,index,cnt,
int indegree[nMax],outdegree[nMax];
void tarjan(int u)//tarjan算法
DFN[u] = Low[u] = ++//时间戳及low的初始化
stack[top ++] =//堆栈
inStack[u] =//是否已经在栈中
for (int i = 1; i &= ++ i)
if (map[u][i])//如果有边
if (!DFN[i])//如果还没访问过
tarjan(i);
Low[u] = Min(Low[u], Low[i]);
else if (inStack[i])//如果已经在堆栈中
Low[u] = Min(Low[u], DFN[i]);
if (DFN[u] == Low[u])//强连通分量
int tmp = stack[-- top];
belong[tmp] =//记录属于cnt强连通分量的所有点tmp
inStack[tmp] =//并出栈
if (tmp == u)//到达根节点
void output()
int inNum = 0,outNum = 0;
memset(indegree, 0, sizeof(indegree));
memset(outdegree, 0, sizeof(outdegree));
for (int i = 1; i &= ++ i)//求强连通分量的出度和入度
for (int j = 1; j &= ++ j)
if (map[i][j] && belong[i] != belong[j])
indegree[belong[j]] ++;
outdegree[belong[i]] ++;
for (int i = 1; i &= ++ i)//求出出度和入度为0的点的个数
if (!indegree[i])
if (!outdegree[i])
outNum ++;
if (cnt == 1)//如果这个图强连通
printf(&1\n0\n&);
else//否则
printf(&%d\n%d\n&,inNum, inNum & outNum ? inNum : outNum);
int main()
while (scanf(&%d&, &n) != EOF)
memset(map, 0, sizeof(map));
memset(inStack, false, sizeof(inStack));
memset(DFN, 0, sizeof(DFN));
index = cnt = top = 0;
for (int i = 1; i &= ++ i)
while (scanf(&%d&, &v) && v)
map[i][v] = 1;
for (int i = 1; i &= ++ i)
if (!DFN[i])
tarjan(i);//tarjan算法
虽然看了好多文章,理解了好多遍,但是在下还有一点不明白,忘大神指点一二:
就是求Low[u]的时候,为何不全是Min(Low[u], Low[i])为何还有在不在栈中之分???????????求解释。
最主要的是将Min(Low[u], DFN[i])改为Min(Low[u], Low[i])程序也能过,我相信这个地方肯定是有用的,也许我还没学习到吧。。。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:268547次
积分:5600
积分:5600
排名:第1892名
原创:279篇
转载:26篇
评论:100条
(1)(1)(3)(6)(7)(3)(4)(1)(2)(16)(13)(4)(15)(3)(1)(10)(11)(3)(1)(2)(5)(13)(22)(12)(14)(53)(33)(3)(20)(17)(2)(9)数据结构(c语言版)第三版习题解答_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
暂无相关推荐文档
数据结构(c语言版)第三版习题解答
李​云​清​ ​ ​ ​扬​庆​红​ ​ ​揭​安​全​ ​ ​ ​编​著
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢第十六章 图的基本概念及其矩阵表示_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
第十六章 图的基本概念及其矩阵表示
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
大小:1.39MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的是____.②在本实验中,两次拉橡皮条时,都需要将橡皮条拉到____,这样做的目的是____.(2)某实验小组利用如图甲所示的实验装置来验证机械能守恒定律.已知当地的重力加速度g=9.80m/s2①实验小组选出一条纸带如图乙所示,其中O点为打点计时器打下的第一个点,A、B、C为三个计数点,在计数点A和B、B和C之间还各有一个点,测得h1=12.01cm,h2=19.15cm,h3=27.86cm.打点计时器通以50Hz的交流电.根据以上数据算出:当打点计时器打到B点时重锤的重力势能比开始下落时减少了____J;此时重锤的动能比开始下落时增加了____J,根据计算结果可以知道该实验小组在做实验时出现的问题是____.(重锤质量m已知)②在图乙所示的纸带基础上,某同学又选取了多个计数点,并测出了各计数点到第一个点O的距离h,算出了各计数点对应的速度v,以h为横轴,以v2/2为纵轴画出的图线应是如图3中的____.图线的斜率表示____.-乐乐题库
& 验证机械能守恒定律知识点 & “(1)“验证力的平行四边形定则”的实验情...”习题详情
99位同学学习过此题,做题成功率72.7%
(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的是F′&.②在本实验中,两次拉橡皮条时,都需要将橡皮条拉到O点&,这样做的目的是确保效果相同&.(2)某实验小组利用如图甲所示的实验装置来验证机械能守恒定律.已知当地的重力加速度g=9.80m/s2①实验小组选出一条纸带如图乙所示,其中O点为打点计时器打下的第一个点,A、B、C为三个计数点,在计数点A和B、B和C之间还各有一个点,测得h1=12.01cm,h2=19.15cm,h3=27.86cm.打点计时器通以50Hz的交流电.根据以上数据算出:当打点计时器打到B点时重锤的重力势能比开始下落时减少了1.88 m&J;此时重锤的动能比开始下落时增加了1.96m&&J,根据计算结果可以知道该实验小组在做实验时出现的问题是该实验小组做实验时先释放了纸带,然后再合上打点计时器的电键或者释放纸带时手抖动了&.(重锤质量m已知)②在图乙所示的纸带基础上,某同学又选取了多个计数点,并测出了各计数点到第一个点O的距离h,算出了各计数点对应的速度v,以h为横轴,以v22为纵轴画出的图线应是如图3中的D&.图线的斜率表示重力加速度g&.
本题难度:一般
题型:填空题&|&来源:2009-深圳二模
分析与解答
习题“(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的...”的分析与解答如下所示:
(1)在“验证力的平行四边形定则”实验中:需要注意的问题是:①弹簧秤与木板平面平行;②确定力的方向时取点越远越好,即绳越细越长越好;③确定方向时不能碰到线;④夹角既不能太大也不能太小;⑤画力的图示时使用同一的标度;⑥将节点拉到相同的位置保证效果相同,了解这些注意事项即可正确解答本题.(2)解决实验问题首先要掌握该实验原理,了解实验的仪器、操作步骤和数据处理以及注意事项.纸带法实验中,若纸带匀变速直线运动,测得纸带上的点间距,利用匀变速直线运动的推论,可计算出打出某点时纸带运动的瞬时速度,从而求出动能.根据功能关系得重力势能减小量等于重力做功的数值.利用图象问题结合数学知识处理物理数据是实验研究常用的方法.我们更多的研究直线图形,找出其直线的斜率和截距.
解:(1)①F1与F2合力的实验值是指通过实验得到值,即用一个弹簧拉绳套时测得的力的大小和方向,而理论值(实际值)是指通过平行四边形得出的值,故F′是力F1与F2合力的实验值,其方向一定沿AO方向.②为了使弹簧两次拉橡皮条的效果相同,要求在同一次实验中,O点位置不动;为了体现合力和分力的效果相同,同时便于作图比较合力的理论值和实验值,要求分力与合力在同一平面内,(2):①根据重力势能的定义式得出:当打点计时器打在B点时,重锤的重力势能的减少量为△EP=mgh2=1.88m,利用匀变速直线运动的推论vB=xACtAC=h3-h14T=0.14×0.02m/s=1.98m/s △EK=EkB-0=12mvB2=1.96m.以上发现:△EK>△EP,说明打出的第一个点已经具有了一定的速度.该实验小组在做实验时出现的问题可能原因是实验时先释放纸带,然后再接通打点计时器的电源.②利用 12v2-h图线处理数据,物体自由下落过程中机械能守恒,mgh=12mv2,即 12v2=gh由于打出的第一个点已经具有了一定的速度,所以h为0时,v已经不为0呢.所以以 12v2为纵轴,以h为横轴画出的图线应是图乙中D.那么 12v2-h图线的斜率就等于重力加速度g.故答案为:(1)①F′②相同位置,保证前后两次拉橡皮条时的效果相同(2)①1.88m,1.96m,该实验小组做实验时先释放了纸带,然后再合上打点计时器的电键&或者&释放纸带时手抖动了②D,重力加速度g
该题比较全面的考察了验证平行四边形定则中的基础知识,对于这些基础知识和要求即要通过实验进行切身体会,同时也要通过练习加深理解.对于物理量线性关系图象的应用我们要从两方面:1、从物理角度找出两变量之间的关系式2、从数学角度找出图象的截距和斜率,两方面结合解决问题.要能够找出斜率和截距的物理意义,我们必须要从物理角度找出两个物理变量的关系表达式.
找到答案了,赞一个
如发现试题中存在任何错误,请及时纠错告诉我们,谢谢你的支持!
(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿...
错误类型:
习题内容残缺不全
习题有文字标点错误
习题内容结构混乱
习题对应知识点不正确
分析解答残缺不全
分析解答有文字标点错误
分析解答结构混乱
习题类型错误
错误详情:
我的名号(最多30个字):
看完解答,记得给个难度评级哦!
还有不懂的地方?快去向名师提问吧!
经过分析,习题“(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的...”主要考察你对“验证机械能守恒定律”
等考点的理解。
因为篇幅有限,只列出部分考点,详细请访问。
验证机械能守恒定律
与“(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的...”相似的题目:
(1).某同学利用光电门传感器设计了一个研究小物体自由下落时机械能是否守恒的实验,实验装置如图所示,图中A、B两位置分别固定了两个光电门传感器.实验时测得小物体上宽度为d的挡光片通过A的挡光时间为t1,通过B的挡光时间为t2.为了证明小物体通过A、B时的机械能相等,还需要进行一些实验测量和列式证明.①(单选)选出下列必要的实验测量步骤A.用天平测出运动小物体的质量mB.测出A、B两传感器之间的竖直距离hC.测出小物体释放时离桌面的高度HD.用秒表测出运动小物体通过A、B两传感器的时间△t②若该同学用d和t的比值来反映小物体经过A、B光电门时的速度,并设想如果能满足&&&&关系式,即能证明在自由落体过程中小物体的机械能是守恒的.(2)为测量某电阻丝R的电阻值,①某同学先用多用电表粗测其电阻.用已经调零且选择开关指向欧姆挡“×10”档位的多用电表测量,发现指针的偏转角度太大,这时他应将选择开关换成欧姆挡的“&&&&”档位(选填“×100”或“×1”),然后进行&&&&,再次测量电阻丝的阻值,其表盘及指针所指位置如图所示,则此段电阻丝的电阻为&&&&Ω.②现要进一步精确测量其阻值,实验室提供了以下相关器材,电池(4V,内阻1Ω),电流表(0~300mA,内阻2Ω),电压表(0~3V,内阻3kΩ),滑动变阻器(0~10Ω,额定电流1A),为使通过待测电阻的电流能在0~250mA范围内改变,下列给出的测量电路中,最合适的电路是&&&&
在做“验证机械能守恒定律”实验时,下列测量工具不需要的是(  )刻度尺交流电源天平重锤
(2006o湖南模拟)在“验证机械能守恒定律”的实验中,打点计时器接在电压为6V、50Hz的交流电源上,自由下落的重物质量为1kg,一条理想的纸带数据如图所示,单位是cm,g是9.8m/s2.点OA之间还有几个点没画出,从起点O到打下计数点B的过程中,重力势能的减少量△EP=&&&&J;此过程中物体动能的增量△EK=&&&&J.
“(1)“验证力的平行四边形定则”的实验情...”的最新评论
该知识点好题
1在做“用落体法验证机械能守恒定律”的实验中,除了铁架台、低压交流电源、纸带等实验器材外,还必需的器材应包括(  )
2“验证机械能守恒定律”的实验装置如图所示,实验中发现重物增加的动能略小于减少的重力势能,其主要原因是(  )
3某同学将一条做“验证机械能守恒定律”实验时打出的纸带,混在了其它2条纸带中,已知打点计时器所用交流电频率为50Hz.为找出该纸带,该同学在每条纸带上取了点迹清晰的、连续的中个点,用刻度尺测出相邻两个点间距离依次为S1、S2、S3.请你根据下列S1、S2、S3的测量结果确定该纸带为.(已知当地的重力加速度为2.地e/s2)(  )
该知识点易错题
1在做“用落体法验证机械能守恒定律”的实验中,除了铁架台、低压交流电源、纸带等实验器材外,还必需的器材应包括(  )
2“验证机械能守恒定律”的实验装置如图所示,实验中发现重物增加的动能略小于减少的重力势能,其主要原因是(  )
3某同学将一条做“验证机械能守恒定律”实验时打出的纸带,混在了其它2条纸带中,已知打点计时器所用交流电频率为50Hz.为找出该纸带,该同学在每条纸带上取了点迹清晰的、连续的中个点,用刻度尺测出相邻两个点间距离依次为S1、S2、S3.请你根据下列S1、S2、S3的测量结果确定该纸带为.(已知当地的重力加速度为2.地e/s2)(  )
欢迎来到乐乐题库,查看习题“(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的是____.②在本实验中,两次拉橡皮条时,都需要将橡皮条拉到____,这样做的目的是____.(2)某实验小组利用如图甲所示的实验装置来验证机械能守恒定律.已知当地的重力加速度g=9.80m/s2①实验小组选出一条纸带如图乙所示,其中O点为打点计时器打下的第一个点,A、B、C为三个计数点,在计数点A和B、B和C之间还各有一个点,测得h1=12.01cm,h2=19.15cm,h3=27.86cm.打点计时器通以50Hz的交流电.根据以上数据算出:当打点计时器打到B点时重锤的重力势能比开始下落时减少了____J;此时重锤的动能比开始下落时增加了____J,根据计算结果可以知道该实验小组在做实验时出现的问题是____.(重锤质量m已知)②在图乙所示的纸带基础上,某同学又选取了多个计数点,并测出了各计数点到第一个点O的距离h,算出了各计数点对应的速度v,以h为横轴,以v2/2为纵轴画出的图线应是如图3中的____.图线的斜率表示____.”的答案、考点梳理,并查找与习题“(1)“验证力的平行四边形定则”的实验情况如图1甲所示,其中A为固定橡皮条的图钉,O为橡皮条与细绳的结点,OB和OC为细绳套.图1乙是在白纸上根据实验结果画出的图.①图乙中的F与F′两力中,方向一定沿AO方向的是____.②在本实验中,两次拉橡皮条时,都需要将橡皮条拉到____,这样做的目的是____.(2)某实验小组利用如图甲所示的实验装置来验证机械能守恒定律.已知当地的重力加速度g=9.80m/s2①实验小组选出一条纸带如图乙所示,其中O点为打点计时器打下的第一个点,A、B、C为三个计数点,在计数点A和B、B和C之间还各有一个点,测得h1=12.01cm,h2=19.15cm,h3=27.86cm.打点计时器通以50Hz的交流电.根据以上数据算出:当打点计时器打到B点时重锤的重力势能比开始下落时减少了____J;此时重锤的动能比开始下落时增加了____J,根据计算结果可以知道该实验小组在做实验时出现的问题是____.(重锤质量m已知)②在图乙所示的纸带基础上,某同学又选取了多个计数点,并测出了各计数点到第一个点O的距离h,算出了各计数点对应的速度v,以h为横轴,以v2/2为纵轴画出的图线应是如图3中的____.图线的斜率表示____.”相似的习题。

我要回帖

更多关于 伪代码怎么写 的文章

 

随机推荐