博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第六章学习小结
阅读量:5080 次
发布时间:2019-06-12

本文共 1891 字,大约阅读时间需要 6 分钟。

题目:

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:

输入第1行给出2个整数N(0)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:

按照"{ v1​​ v2​​ ... vk​​ }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:

8 60 70 12 04 12 43 5

输出样例:

{ 0 1 4 2 7 }{ 3 5 }{ 6 }{ 0 1 2 7 4 }{ 3 5 }{ 6 } 心得体会: 这道题的解题思路还是比较清晰的 即对于两个遍历的运用 解决这道题的思路是: ①建立起一个图并且填充 ②完成DFS遍历 ③完成BFS遍历 ① 根据题意可以选择以邻接矩阵的数据结构来建立图 首先是根据题意定义一个图的结构体
struct graph{
int arcs[mvnum][mvnum];//邻接矩阵 int vexnum, arcnum;//顶点数 边数};
然后是图的填充
void creategraph(graph &g){    cin >> g.vexnum >> g.arcnum;//输入顶点与边数    int a, b;//端点编号    for (int i = 0; i < g.arcnum; ++i)    {        cin >> a >> b;//输入相连的端点编号        g.arcs[a][b] = g.arcs[b][a] = 1;//在邻接矩阵中将两端点状态赋值为相连    }}
 

 ②

  DFS遍历

  首先是定义一个访问数组

bool visited[mvnum];//访问数组

     然后为完成遍历连通图部分

void dfs(graph g, int v){    cout << " "<

 

  最后为完成非连通图部分

void dfss(graph g){    for (int j = 0; j < g.vexnum; ++j)    {        if (!visited[j])//若有端点未被访问        {            cout << "{
"; dfs(g, j); cout << " }"<

 

 ③

 BFS遍历

 首先还是定义一个访问数组

bool visit[mvnum];

    

 然后为完成遍历连通图部分

void bfs(graph g,int v){    int x;//队头元素    cout << " " << v; //输出当前访问端点编号    visit[v] = 1; //将其作为访问数组下标,赋值其状态为已访问    queue
q; //存放端点编号队列 q.push(v);//v入队 while(!q.empty()) //当队列为空时结束循环 { x = q.front();//取队头元素 q.pop();//队头元素出队 for (int i = 0; i < g.vexnum; ++i) { if (!visit[i] && g.arcs[x][i] == 1)//若该端点编号i未被访问过,且其与当前所访问端点x相连 { cout << " "<

 

  最后最后为完成非连通图部分

void bfss(graph g){    for (int i = 0; i < g.vexnum; ++i)    {                if (!visit[i])//若有端点未被访问        {            cout << "{
"; bfs(g, i); cout << " }" << endl; } }}

 

 需要注意的地方:

  弄清循环条件,究竟是图的边数还是顶点数

 

目标完成情况: 与之前相比,找出入手点能力有所提高
目标:
提高对“图”方面知识的认识与理解,并能运用
 

 

    

 

 

 

 

 

 
 

 

 

转载于:https://www.cnblogs.com/Berlins/p/10891387.html

你可能感兴趣的文章
BZOJ 1047 HAOI2007 理想的正方形 单调队列
查看>>
各种语言推断是否是手机设备
查看>>
这个看起来有点简单!--------实验吧
查看>>
PHP count down
查看>>
JVM参数调优:Eclipse启动实践
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
python的列表与shell的数组
查看>>
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
python标准库——queue模块 的queue类(单向队列)
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
深入理解JVM读书笔记--字节码执行引擎
查看>>
vue-搜索功能-实时监听搜索框的输入,N毫秒请求一次数据
查看>>
批处理 windows 服务的安装与卸载
查看>>
React文档翻译 (快速入门)
查看>>
nodejs fs路径
查看>>
动态规划算法之最大子段和
查看>>
linux c:关联变量的双for循环
查看>>