数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
2016-04-05 20:30
411 查看
数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
输入
输入第一行为整数n(0< n <100),表示数据的组数。对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
输出
输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。
示例输入
1 6 7 0 0 3 0 4 1 4 1 5 2 3 2 4 3 5
示例输出
0 3 4 2 5 1
提示
以邻接矩阵作为存储结构。
来源
#include <stdio.h> #include <stdlib.h> #include <string.h> int a[102][102]; int que[110]; int book[110]; int main() { int n; scanf("%d", &n); while(n--){ memset(book,0,sizeof(book)); memset(que,0,sizeof(que)); int k, m, t; scanf("%d %d %d", &k, &m, &t); int u, v; for(int i = 0;i < m;i++){ scanf("%d %d", &u, &v); a[u][v] = a[v][u] = 1; } int head =0; int tail = 1; que[head] = t; int cur; book[t] = 1; while(head < tail){ cur = que[head]; head++; for(int i = 0;i <k;i++){ if(a[cur][i] == 1&&book[i] ==0){ book[i] = 1; que[tail++] = i; } } } for(int i = 0;i < k;i++){ if(i == 0){ printf("%d", que[i]); }else { printf(" %d", que[i]); } } printf("\n"); } return 0; }
相关文章推荐
- 数据结构之线性表(C#)
- 数据结构-java与c实现带头结点的单链表
- 用栈+回溯+非递归解决N皇后问题
- 通俗地介绍下---数据结构之堆
- OVS端口模块的重要数据结构3
- 数据结构实现循环队列的两种方法
- 关于链表、树等数据结构中常见的二级指针
- 【数据结构与算法】十六
- 【数据结构】二叉树的翻转递归与非递归实现
- 数据结构与算法——普通树的定义与C++实现
- 数据结构与算法分析之----各种常用排序详解
- 大话数据结构—平衡二叉树(AVL树)
- 自定义,控件组(用于快速展示和修改指定的数据结构)
- 数据结构(一)-----线性表
- 学习数据结构
- Java数据结构学习1--List
- 数据结构 线性表
- 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
- 数据结构与算法——求最大子矩阵问题
- 二叉树的遍历