描述

图(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语言的更多相关文章

  1. BFS - leetcode [宽度优先遍历]

    127. Word Ladder int size = q.size(); for(int k = 0; k < size; k++){//for 次数 找到一个erase一个 q里面加入的是所 ...

  2. <数据结构>XDOJ324,325图的优先遍历

    XDOJ324.图的广度优先遍历 问题与解答 问题描述 已知无向图的邻接矩阵,以该矩阵为基础,给出广度优先搜索遍历序列,并且给出该无向图的连通分量的个数.在遍历时,当有多个点可选时,优先选择编号小的顶 ...

  3. 【算法入门】广度/宽度优先搜索(BFS)

    广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...

  4. 图的存储与遍历C++实现

    1.图的存储 设点数为n,边数为m 1.1.二维数组 方法:使用一个二维数组 adj 来存边,其中 adj[u][v] 为 1 表示存在 u到 v的边,为 0 表示不存在.如果是带边权的图,可以在 a ...

  5. 图结构练习——判断给定图是否存在合法拓扑序列(dfs算法(第一个代码),邻接矩阵(前两个代码),邻接表(第三个代码))

    sdut 2140 图结构练习——判断给定图是否存在合法拓扑序列 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个有向图 ...

  6. C++版 - 剑指offer 面试题24:二叉搜索树BST的后序遍历序列(的判断) 题解

    剑指offer 面试题24:二叉搜索树的后序遍历序列(的判断) 题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则返回true.否则返回false.假设输入的数组的任意两个 ...

  7. 【BFS宽度优先搜索】

    一.求所有顶点到s顶点的最小步数   //BFS宽度优先搜索 #include<iostream> using namespace std; #include<queue> # ...

  8. SDUT OJ 数据结构实验之图论十:判断给定图是否存在合法拓扑序列

    数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Prob ...

  9. 数据结构之 图论---基于邻接矩阵的广度优先搜索遍历(输出bfs遍历序列)

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索( ...

随机推荐

  1. hdu 1233 还是畅通工程(最小生成树,基础)

    题目 //也是标准的最小生成树啊,我就改一点点,不重新再打一遍增加熟练度了 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #inclu ...

  2. 阻止事件冒泡(stopPropagation和cancelBubble)和阻止默认行为(preventDefault和returnValue)

    <div id="divId1" style="width:500px;height:500px;background-color:#3ac;text-align: ...

  3. ScannerTest-------double string

    import java.util.*; public class ScannerTest { public static void main(String[] args){ Scanner scann ...

  4. NPOI基础入门(旧版本)

    1.常用的类与方法 工作本HSSFWorkbook 构造方法,无参表示创建一个新的工作本,可以接收一个流用于打开一个现有的工作本 方法CreateSheet(索引):创建指定索引的sheet对象 方法 ...

  5. Bolt 动画

    引擎内置的 种动画 --PosChangeAnimation 平移 local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory&quo ...

  6. (转)SSI开发环境搭建

    本文转自:http://blog.csdn.net/lifuxiangcaohui/article/details/7187869 先来点文字性的描述: MVC对于我们来说,已经不陌生了,它起源于20 ...

  7. C++:String类

    String类 1.使用String类必须在程序的开始包括头文件string,即要有如下语句:#include<string> 2.string类字符串对象的使用方法与其他对象一样stri ...

  8. Proxifier设置代理

    1.首先需要开启http代理选项---配置文件->高级->HTTP代理服务器,勾选“启用HTTP代理服务器支持” 2.然后开始添加代理服务器选择“配置文件->代理服务器”,在弹出框点 ...

  9. chrome浏览器无法设置打开特定网页

    最近chrome浏览器更新后,发现以前设置的启动浏览器“重上次停下的地方继续”功能消失了. 当我点击设置网页时,会出现如上提示. 后来有同事给了如下一个连接,里面说到这个是公司的超级管理员搞的,他定义 ...

  10. Jenkins iOS – Git, xcodebuild, TestFlight

    Introduction with Jenkins iOS If you are new to continuous integration for mobile platforms then you ...