问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

想要流程图

发布网友 发布时间:2022-05-11 08:37

我来回答

7个回答

热心网友 时间:2022-05-22 02:51

图的遍历

从图中某一顶点出发访遍图中其余顶点,且使每一顶点仅被访问一次。这一过程叫做图的遍历。
遍历图的基本方法有两种:深度优先搜索和广度优先搜索。这两种方法都适用于有向图和无向图。
和树的遍历类似,图的遍历也是从某个顶点出发,沿着,某条边搜索路径对图中所有顶点各作一次访问。若给定的图是连通图,则从图中任意顶点出发顺着边可以访问到该图中所有的顶点,然而,图的遍历比树的遍历复杂得多,这是因为图中的任一点都可能和其余顶点相邻接,故在访问了某个顶点之后,可能顺着某条回路又到了该顶点。为了避免重复访问同一个顶点,必须记住每个顶点是否被访问过。为此,可设置一个布尔向量visited[1..n],它的初值为false,一旦访问了顶点vi,便将visited[i]置为ture。

一、连通图的深度优先搜索
连通图深度优先搜索的基本思想如下:假定图中某个顶点v1为出发点,首先访问出发点v1,然后任选一个v1的访问过的邻接点v2,以v2为新的出发点继续进行深度优先搜索,直至图中所有顶点被访问过。
显然,图的深度优先搜索是一个递归过程,类似于树的前序遍历,它的特点是尽可能先对纵深方向进行搜索,故称之深度优先搜索。
现以图5-10中G为例说明深度优搜索过程。假定v1是出发点,首先访问v1。因v1有两个邻接点v2、v3均未被访问,选择v2作为新的出发点。访问v2之后,再找v2的未访问过的邻接点。同v2邻接的有v1、v4、v5,其中v1以被访问过,而v4、v5未被访问。选择v4作为新的出发点。重复上述搜索过程继续依次访问v8、v5。访问v5之后,由于与v5相邻的顶点均以被访问,搜索退回到v8。由于v8、v4、v2都没有未被访问的邻接点,所以搜索过程连续地从v8退回到v4,再退回到v2最后退回到v1这时选择v1的未被访问过的邻接点v3,继续往下搜索,依次访问v3、v6、v7,从而遍历了图中全部顶点。在这个过程中得到的顶点的访问序列:

(a)无向图G

(b)G的深度优先搜索过程
图5-10a 深度优先搜索过程示例

v1→v2→v4→v8→v5→v3→v6→v7
这样的序列就称之为图的深度优先搜索遍历序列。
连通图的深度优先搜索的非形式算法如下:
procere dfs (g:graph;v1:integer);
//从v1出发深度优先遍历图g//
begin write(v1);
visited[v1]:=ture;
找出g中v1的第一邻接点w;
while w存在do
[ if w 未被访问 then dfs(g,w);
w:=g中v1的下一邻接点]
end;
上述非行式算法未涉及图的存储结构.图的遍历过程必然地包含对图中每个顶点查找其邻接点这一操作;而在图的不同存储结构上查找邻接点的方法是不同的.
若以邻接表为存储结构,查找邻接点操作实际上是顺序查找链表.邻接表上的深度优先算法如下:
procere dfs(g:adj_list;v1:integer);
//从v1出发深度优先遍历图g.g以邻接表为存储结构//
begin write(v1);
visited[v1]:=ture;//标志v1已访问//
p=g[v1].link;//找v1的第一个邻接点//
while p<>nil do
[ if not (visited[p↑.adjvex]);//书错写成vertex//
then dfs(g,p↑.adjvex);
p:=p↑.next]//回溯----找v1的下一个邻接点//
end;

二、连通图的广度优先搜索
连通图广度优先搜索的基本思想是:从图中某个顶点v1出发,访问了v1之后依次访问v1的所有邻接点;然后分别从这些邻接点出发按深度优先搜索遍历图的其它顶点,直至所有顶点都被访问到。它类似于树的按层次遍历,其特点是尽可能优先对横向搜索,故称之为广度优先搜索。
下面以图5-10中G为例说明广度优先搜索的过程。首先从起点v1出发,访问v1。v1有两个未曾访问的邻接点v2和v3。先访问v2,再访问v3。然后再先后访问v2的未曾访问过的邻接点v4、v5及v3的未曾访问过的邻接点v6、v7。最后访问v4的未曾访问过的邻接点v8。至此图中所有顶点均以被访问到。得到的顶点访问序列为:

(a)无向图G

(b)G的广度优先搜索过程
图5-10b 广度优先搜索过程示例

v1→v2→v3→v4→v5→v6→v7→v8
相应的,这样的序列就称之为图的广度优先搜索遍历序列。
在广度优先搜索中,若对x的访问先于y,则对x邻接点的访问也先于队y的邻接点的访问。因此,可采用队列来暂存那些刚访问过,但可能还有为访问过的邻接点的顶点。
连通图的广度优先搜索算法如下:
procere bfs(g:adj_list;v1:integer);//书错写成adjlist//
//以邻接表为存储结构的广度优先搜索。Q为队列,假定visited的各分量已只置 为false//
begin init_linkedque(Q);//设计一个空队Q//
visited[v1]:=ture;write(v1);
in_limkedque(Q,v1); //v1入队//
while not empty(Q) do
[ v:=out_linkedque(Q);
p:=adj_list[v].link;//书错写成adjlist//
while p<>nil do
[ if visited[p↑.adjvex]:=false;//书错写成vertex//
then
[visited[p↑.adjvex]:=ture;
with(p↑.adjvex);
in_linkedque(Q,p↑.adjvex);]
p:=p↑.next]]
end;

三、图的连通分量计算
如果要遍历一个非连通图,则需要多次调用dfs或bfs,每一次都要得到一个连通分量;调用dfs或bfs的次数就是连通分量的个数。因此很容易写出非连通图的遍历算法和计算一个图的连通分量得算法。下面给出的是以邻接表为存储结构,通过调用深度优先搜索算法实现的计算连通分量的算法。
procee conn_component (var g:graph;
var visited:array[1..vnum);
begin for v:=1 to vnum do
visited[v]:flase;
count:=0;
for v:=1 to vnum do
if not(visited[v])then
[count:=count+1;
write('component',count,':');
dfs(g,v);writeln;]
end;
对于图5-5中非连通图G3,用上述算法可求出3个连通分量,各连通分量所含顶点如下:
component1: 1 2 3
component2: 4 5 6 7
component3: 8 9
注意,若从上述算法中删去有关连通分量计数器的操作,就得到一个非连通图德遍历算法。

详细资料和图片请参看参考资料,那里的比较详细

参考资料:http://www.gzyz.net.cn/JxYd/ShowArticle.asp?ArticleID=107

热心网友 时间:2022-05-22 04:09

图的遍历

从图中某一顶点出发访遍图中其余顶点,且使每一顶点仅被访问一次。这一过程叫做图的遍历。
遍历图的基本方法有两种:深度优先搜索和广度优先搜索。这两种方法都适用于有向图和无向图。
和树的遍历类似,图的遍历也是从某个顶点出发,沿着,某条边搜索路径对图中所有顶点各作一次访问。若给定的图是连通图,则从图中任意顶点出发顺着边可以访问到该图中所有的顶点,然而,图的遍历比树的遍历复杂得多,这是因为图中的任一点都可能和其余顶点相邻接,故在访问了某个顶点之后,可能顺着某条回路又到了该顶点。为了避免重复访问同一个顶点,必须记住每个顶点是否被访问过。为此,可设置一个布尔向量visited[1..n],它的初值为 false,一旦访问了顶点vi,便将visited[i]置为ture。

一、连通图的深度优先搜索
连通图深度优先搜索的基本思想如下:假定图中某个顶点v1为出发点,首先访问出发点v1,然后任选一个v1的访问过的邻接点v2,以v2为新的出发点继续进行深度优先搜索,直至图中所有顶点被访问过。
显然,图的深度优先搜索是一个递归过程,类似于树的前序遍历,它的特点是尽可能先对纵深方向进行搜索,故称之深度优先搜索。
现以图5-10中G为例说明深度优搜索过程。假定v1是出发点,首先访问v1。因v1有两个邻接点v2、v3均未被访问,选择v2作为新的出发点。访问v2之后,再找v2的未访问过的邻接点。同v2邻接的有v1、v4、v5,其中v1以被访问过,而v4、v5未被访问。选择v4作为新的出发点。重复上述搜索过程继续依次访问v8、v5。访问v5之后,由于与v5相邻的顶点均以被访问,搜索退回到v8。由于v8、v4、v2都没有未被访问的邻接点,所以搜索过程连续地从v8退回到v4,再退回到v2最后退回到v1这时选择v1的未被访问过的邻接点v3,继续往下搜索,依次访问v3、v6、v7,从而遍历了图中全部顶点。在这个过程中得到的顶点的访问序列:

(a)无向图G

(b)G的深度优先搜索过程
图5-10a 深度优先搜索过程示例

v1→v2→v4→v8→v5→v3→v6→v7
这样的序列就称之为图的深度优先搜索遍历序列。
连通图的深度优先搜索的非形式算法如下:
procere dfs (g:graph;v1:integer);
//从v1出发深度优先遍历图g//
begin write(v1);
visited[v1]:=ture;
找出g中v1的第一邻接点w;
while w存在do
[ if w 未被访问 then dfs(g,w);
w:=g中v1的下一邻接点]
end;
上述非行式算法未涉及图的存储结构.图的遍历过程必然地包含对图中每个顶点查找其邻接点这一操作;而在图的不同存储结构上查找邻接点的方法是不同的.
若以邻接表为存储结构,查找邻接点操作实际上是顺序查找链表.邻接表上的深度优先算法如下:
procere dfs(g:adj_list;v1:integer);
//从v1出发深度优先遍历图g.g以邻接表为存储结构//
begin write(v1);
visited[v1]:=ture;//标志v1已访问//
p=g[v1].link;//找v1的第一个邻接点//
while p<>nil do
[ if not (visited[p↑.adjvex]);//书错写成vertex//
then dfs(g,p↑.adjvex);
p:=p↑.next]//回溯----找v1的下一个邻接点//
end;

二、连通图的广度优先搜索
连通图广度优先搜索的基本思想是:从图中某个顶点v1出发,访问了v1之后依次访问v1的所有邻接点;然后分别从这些邻接点出发按深度优先搜索遍历图的其它顶点,直至所有顶点都被访问到。它类似于树的按层次遍历,其特点是尽可能优先对横向搜索,故称之为广度优先搜索。
下面以图5-10中G为例说明广度优先搜索的过程。首先从起点v1出发,访问v1。v1有两个未曾访问的邻接点v2和v3。先访问v2,再访问 v3。然后再先后访问v2的未曾访问过的邻接点v4、v5及v3的未曾访问过的邻接点v6、v7。最后访问v4的未曾访问过的邻接点v8。至此图中所有顶点均以被访问到。得到的顶点访问序列为:

(a)无向图G

(b)G的广度优先搜索过程
图5-10b 广度优先搜索过程示例

v1→v2→v3→v4→v5→v6→v7→v8
相应的,这样的序列就称之为图的广度优先搜索遍历序列。
在广度优先搜索中,若对x的访问先于y,则对x邻接点的访问也先于队y的邻接点的访问。因此,可采用队列来暂存那些刚访问过,但可能还有为访问过的邻接点的顶点。
连通图的广度优先搜索算法如下:
procere bfs(g:adj_list;v1:integer);//书错写成adjlist//
//以邻接表为存储结构的广度优先搜索。Q为队列,假定visited的各分量已只置 为false//
begin init_linkedque(Q);//设计一个空队Q//
visited[v1]:=ture;write(v1);
in_limkedque(Q,v1); //v1入队//
while not empty(Q) do
[ v:=out_linkedque(Q);
p:=adj_list[v].link;//书错写成adjlist//
while p<>nil do
[ if visited[p↑.adjvex]:=false;//书错写成vertex//
then
[visited[p↑.adjvex]:=ture;
with(p↑.adjvex);
in_linkedque(Q,p↑.adjvex);]
p:=p↑.next]]
end;

三、图的连通分量计算
如果要遍历一个非连通图,则需要多次调用dfs或bfs,每一次都要得到一个连通分量;调用dfs或bfs的次数就是连通分量的个数。因此很容易写出非连通图的遍历算法和计算一个图的连通分量得算法。下面给出的是以邻接表为存储结构,通过调用深度优先搜索算法实现的计算连通分量的算法。
procee conn_component (var g:graph;
var visited:array[1..vnum);
begin for v:=1 to vnum do
visited[v]:flase;
count:=0;
for v:=1 to vnum do
if not(visited[v])then
[count:=count+1;
write('component',count,':');
dfs(g,v);writeln;]
end;
对于图5-5中非连通图G3,用上述算法可求出3个连通分量,各连通分量所含顶点如下:
component1: 1 2 3
component2: 4 5 6 7
component3: 8 9
注意,若从上述算法中删去有关连通分量计数器的操作,就得到一个非连通图德遍历算法。

详细资料和图片请参看参考资料,那里的比较详细

参考资料:http://www.gzyz.net.cn/JxYd/ShowArticle.asp?ArticleID=107

热心网友 时间:2022-05-22 05:44

如果是想深入学习c语言的话,建议不要去研究流程图。

可以研究伪代码。

那你就直接求算法,求类c实现的算法。更容易调试成程序。

热心网友 时间:2022-05-22 07:35

建议你去买本c语言看看,里面都有,而且详细,在这看看资料可以,但要深入研究,这是不够的

热心网友 时间:2022-05-22 09:43

这不好画流程图啊··
图形符号怎么画啊···

热心网友 时间:2022-05-22 12:08

对于初学者流程图比较直观,不过楼上说的对 伪代码容易书写 而且方便

热心网友 时间:2022-05-22 14:49

MARK

参考资料:四罐菠菜的脑袋

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在筋骨堂治疗腰椎间盘突出一个疗程后已有好转,隔了三、四天又疼上了... 美的3⃣️匹柜机空调为什么不制热是什么原因? 小票打印机不出字的原因及解决方法如何解决小票打印机无法打印字的问题... 电脑打单打印机出不了小票超市收银台电脑键盘怎么用 交易房屋如何分类 城市规划用途分类该怎么做 规划用途的分类 ...打火机散件设备公司 值得信赖么 ?是不是《骗子》皮包公司? 希望给予... 哈尔滨农垦太阳神打火机散件厂是否骗人 有没有人知道网上那些打火机加工的广告是不是真是可靠?做打火机反销... 线性聚氨酯工艺流程图怎么画? 家电清洗:三阳波轮洗衣机免拆清洗,用户这种要求第一次见 请问家电免拆卸清洗是真的吗 在word中插入的空白页,行距变得很大,我设置的是固定值22磅,这是怎么回事,求高手 word2007 设置好文档段落行距为固定值22磅,但再全选查看段落设置都是空的。 吃完一个柚子应该会长多少体重? 一个柚子的皮是142克,那么柚子的肉大概是多少克? 怎样用css实现圆角矩形? 北京银行工作人员上门让办的信用卡怎么查询进度 如何在百度360搜狗同时做网站优化? 想知道怎么做SEO 怎样在同一部手机上用两个微信!怎么才能下载另一个! 为什么360问答SEO那么难做?还不收录? 同一个手机号可以分身三个吗 床底下放宝剑镇宅辟邪吗? 刀剑适合摆放在家里的什么地方 我们家的宝剑挂在进门的位置可以吗? 镇宅宝剑不想要了可以直接扔了吗?扔哪里好? 什么剑才会有煞气,才能镇宅? 曝新款宝马X5谍照 或2022年全球首发 线性表及其应用(多项式相加、相乘)----根据程序画出流程图及对每句程序加注释(c语言) 方程组流程图怎么画 用c语言编写一个程序用高斯消元法求解线性方程组的解程序流程图 图中这两个程序流程图哪个是结构化的,哪个是非结构化的,为什么? 作文 快乐的寒假 600字左右 含泪跪求跪求 如何在word中画出线性规划的坐标图,或者在CAD中也可以,怎么画(还有别的软件可以实现吗)?谢谢! 快乐寒假的作文51字。 求画流程图~~~!! 有没有一篇以快乐寒假为题的作文 软件工程中什么是变换型数据流图 画出它的程序流程图.它是结构化的还是非 私募直营店:ETF套利交易有哪些类型? 股票崩盘会引发什么后果 为什么我家电脑的屏幕都变成绿色的了? 为什么我的电脑开机时屏幕是绿色的?? 东北的呢了鸟学名叫什么怎么喂养 鸟夏季饲养管理需要注意哪些主要问题? 如何关闭qq空间,我想关了 别人和我说要投票,然后要我微信密码,让我等三天,我现在上不去了,说我未注册怎么办? 大g63怎么连蓝牙听歌?