数据结构实验之图论二:基于邻接表的广度优先搜索遍历
来源:互联网 发布:巫蛊之乱 知乎 编辑:程序博客网 时间:2024/06/06 03:12
Problem Description
给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)
Input
输入第一行为整数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顶点的无向边。
对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起始顶点。
下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
Output
输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示BFS的遍历结果。
Example Input
16 7 00 30 41 41 52 32 43 5
Example Output
0 3 4 2 5 1
#include<stdio.h>#include<string.h>#include<stdlib.h>#define maxn 100typedef struct node{ int data; struct node * next;}map;map * tu[maxn];int book[maxn];int queue[maxn];int num[maxn];int top,front,rear;void sort(int k){ int i,tmp; map * p, *q; for(i=0;i<k;i++) { p=tu[i]; if(!p||!p->next) continue; for(;p;p=p->next) { q=p->next; for(;q;q=q->next) { if(p->data > q->data) { tmp=p->data; p->data=q->data; q->data=tmp; } } } }}void bfs(int x){ int i,j; map * p; book[x]=1; rear++; queue[rear]=x; while(front!=rear) { front++; i=queue[front]; num[++top]=i; p=tu[i]; while(p) { j=p->data; if(!book[j]) { book[j]=1; rear++; queue[rear]=j; } p=p->next; } }}int main(){ int i,n,k,m,t,u,v; map *p; scanf("%d",&n); while(n--) { top=-1; front=rear=0; memset(book,0,sizeof(book)); scanf("%d%d%d",&k,&m,&t); for(i=0;i<k;i++) { tu[i]=NULL; } while(m--) { scanf("%d%d",&u,&v); if(!tu[u]) { p=(map *)malloc(sizeof(tu)); p->data=v; p->next=NULL; tu[u]=p; } else { p=(map *)malloc(sizeof(tu)); p->data=v; p->next=tu[u]->next; tu[u]->next=p; } if(!tu[v]) { p=(map *)malloc(sizeof(tu)); p->data=u; p->next=NULL; tu[v]=p; } else { p=(map *)malloc(sizeof(tu)); p->data=u; p->next=tu[v]->next; tu[v]->next=p; } } sort(k); bfs(t); for(i=0;i<=top;i++) { if(i!=top) { printf("%d ",num[i]); } else { printf("%d\n",num[i]); } } } return 0;}
0 0
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 【2142】数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (SDUT)
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT 2412 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历 (BFS)
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- SDUTACM 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- PHP 网络技术
- 8086汇编6:数据处理的基本问题
- 细说JAVA中Collection接口和Map接口的主要实现类
- Android中Fragment装载WebView 返回键设置问题
- enote笔记语言(4)
- 数据结构实验之图论二:基于邻接表的广度优先搜索遍历
- .arr文件的生成与使用
- [BZOJ3648]寝室管理(点分治+bit)
- STL 关联式容器 Set与Map的用法
- 使用 getopt() 进行命令行处理
- 【置顶】龚祖春会一点一点的改变企业
- 图结构练习——BFSDFS——判断可达性
- sql执行顺序以及on和where的区别
- 10:4 sum