1048 图的宽度优先遍历序列 c语言
描述
图(graph)是数据结构 G=(V,E),其中V是G中结点的有限非空集合,结点的偶对称为边(edge);E是G中边的有限集合。设V={0,1,2,……,n-1},图中的结点又称为顶点(vertex),有向图(directed graph)指图中代表边的偶对是有序的,用<u,v>代表一条有向边(又称为弧),则u称为该边的始点(尾),v称为边的终点(头)。无向图(undirected graph)指图中代表边的偶对是无序的,在无向图中边(u,v )和(v,u)是同一条边。
输入边构成无向图,求以顶点0为起点的宽度优先遍历序列。
输入
第一行为两个整数n、e,表示图顶点数和边数。以下e行,每行两个整数,表示一条边的起点、终点,保证不重复、不失败。1≤n≤20,0≤e≤190
输出
前面n行输出无向图的邻接矩阵,最后一行输出以顶点0为起点的宽度优先遍历序列,对于任一起点,按终点序号从小到大的次序遍历每一条边。每个序号后输出一个空格。
样例输入
4 5
0 1
0 3
1 2
1 3
2 3
样例输出
0 1 0 1
1 0 1 1
0 1 0 1
1 1 1 0
0 1 3 2
代码:
- #include<stdio.h>
- #include<malloc.h>
- typedef struct graph //图的结构体
- {
- int Vertices;
- int **A;
- }Graph;
- void CreateGraph(Graph *g,int n) //创建一个有n个顶点的图g
- {
- int i,j;
- g->Vertices = n;
- g->A = (int**)malloc(n*sizeof(int*));
- for(i = ;i < n;i++)
- {
- g->A[i] = (int*)malloc(n*sizeof(int));
- for(j = ;j < n;j++)
- g->A[i][j] = ;
- }
- }
- int Add(Graph *g,int u,int v) //向图g中添加一条边(u,v)
- {
- int n = g->Vertices;
- if(u<||v<||u>n-||v>n-||g->A[u][v]!=)
- {
- return ;
- }
- g->A[u][v]=;
- return ;
- }
- int Exist(Graph g,int u,int v) //判断图g中是否存在边(u,v)
- {
- int n;
- n = g.Vertices;
- if(u<||v<||u>n-||v>n-||g.A[u][v]==)
- return ;
- return ;
- }
- void BFS(Graph g,int v,int *visited) //宽度优先遍历图g,这里是用了数组进行遍历,没有使用队列
- {
- int a[],i=,j=,k;
- int w;
- visited[v]=;
- printf("%d ",v);
- a[i++]=v;
- while(j!=i)
- {
- w=a[j++];
- for(k=;k<g.Vertices;k++)
- {
- if(Exist(g,w,k)&&visited[k]!=)
- {
- visited[k]=;
- printf("%d ",k);
- a[i++]=k;
- }
- }
- }
- }
- int main()
- {
- int enumber,vnumber,one,two,i,j;
- Graph g;
- int visited[];
- scanf("%d %d",&vnumber,&enumber); //vnumber为顶点数,enumber为边的条数
- if(<=vnumber<=&&<=enumber<=)
- {
- CreateGraph(&g,vnumber);
- }
- else
- return ;
- for(i=;i<enumber;i++) //向图中添加边
- {
- scanf("%d %d",&one,&two);
- Add(&g,one,two);
- Add(&g,two,one);
- }
- for(i=;i<vnumber;i++) //把图的邻接矩阵输出
- {
- for(j=;j<vnumber;j++)
- {
- if(Exist(g,i,j))
- printf("%d ",);
- else
- printf("%d ",);
- }
- printf("\n");
- }
- for(i=;i<g.Vertices;i++) //初始化每个顶点标志位矩阵
- {
- visited[i]=;
- }
- for(i=;i<g.Vertices;i++)
- {
- if(visited[i]!=)
- BFS(g,i,visited); //宽度优先遍历图
- }
- printf("\n");
- return ;
- }
1048 图的宽度优先遍历序列 c语言的更多相关文章
- BFS - leetcode [宽度优先遍历]
127. Word Ladder int size = q.size(); for(int k = 0; k < size; k++){//for 次数 找到一个erase一个 q里面加入的是所 ...
- <数据结构>XDOJ324,325图的优先遍历
XDOJ324.图的广度优先遍历 问题与解答 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出广度优先搜索遍历序列,并且给出该无向图的连通分量的个数.在遍历时,当有多个点可选时,优先选择编号小的顶 ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- 图的存储与遍历C++实现
1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...
- 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))
sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个有向图 ...
- C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解
剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...
- 【BFS宽度优先搜索】
一.求所有顶点到s顶点的最小步数 //BFS宽度优先搜索 #include<iostream> using namespace std; #include<queue> # ...
- SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...
- 数据结构之 图论---基于邻接矩阵的广度优先搜索遍历(输出bfs遍历序列)
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...
随机推荐
- hdu 1863 畅通工程(最小生成树,基础)
题目 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<string.h> #include <ma ...
- IOS委托设计模式(摘自IOS开发指南)
- U盘安装Win7 64位
试了好几遍,失败了的就不说了,直接记下成功的方案,方便下次. 方法为:用UltraISO刻镜像文件到U盘,然后U盘启动安装. 具体如下: 刻u盘之前一定要验证iso镜像的完整性啊(可以用文件校验工具与 ...
- P1005 采药
P1005 采药 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2005复赛普及组第三题 描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的 ...
- cojs 香蕉 解题报告
啦啦啦,今天的考试题 不过原来考试题的n<=10w 由于我有更好的做法,所以我就改成20亿辣 本来先说一说考试题的正解做法的 但是复杂度是O(nlogm),实在是太渣了 所以还是说一说我的做法吧 ...
- js捕捉浏览器关闭事件-兼容几乎所有浏览器
很多时候我们都在困扰,如何捕获浏览器关闭事件,网上虽然有很多方法,但都不理想,后来终于找到了一个很好地实现方法,大家可以试试哦,支持几乎所有的浏览器 <script type="tex ...
- 使用 powershell 的 grep 过滤文本
使用 powershell 的 grep 过滤文本 有个log文件,大小在4M左右,要求找出里面耗时超过100s 的记录.首先想到了强大的 grep ,那么就搞起. 先在网上找一下资料,这篇文章,有几 ...
- PHP优化杂烩
讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的. pool 一个让人沮丧的消息是绝大多数 PHP 程序员都 ...
- Android 下log的使用总结
Android 下log的使用总结 一:在源码开发模式下 1:包含头文件: #include <cutils/log.h> 2:定义宏LOG_TAG #define LOG_TAG &qu ...
- Android动画 三种动画
Android可以使用三种动画 Frame Animation-帧动画 ,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果 Tween Animation-补间动画,给出两个关键帧, ...