SDUT 2142 数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    xiaoxiao2026-03-12  10

    数据结构实验之图论二:基于邻接表的广度优先搜索遍历

    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<bits/stdc++.h> using namespace std; queue<int>q; struct node { int adj; struct node *next; }; typedef struct vnode { int data; struct node *first; }adjlist[110]; typedef struct { adjlist a; int vn,an; }list1; int k,i,j; int creat(list1 &g) { int v1,v2; struct node *p; cin>>g.vn>>g.an>>k; for(i=0;i<g.vn;i++) { g.a[i].first=NULL; } for(i=0;i<g.an;i++) { cin>>v1>>v2; p=new node; p->adj=v2; p->next=g.a[v1].first; g.a[v1].first=p; p=new node; p->adj=v1; p->next=g.a[v2].first; g.a[v2].first=p; } return 1; } int v[110]; void bfs(list1 &g,int k) { struct node *p; memset(v,0,sizeof(v)); v[k]=1; q.push(k); cout<<k; while(!q.empty()) { i=q.front(); q.pop(); p=g.a[i].first; { while(p) { if(!v[p->adj]) { v[p->adj]=1; q.push(p->adj); cout<<" "<<p->adj; } p=p->next; } } } } void Swap(list1 &g) { int t; struct node *p,*q; for(i=0; i<g.vn; i++) for(p = g.a[i].first; p; p=p->next) for(q = p->next; q; q=q->next) if(p->adj > q->adj) { t = p->adj; p->adj = q->adj; q->adj = t; } } int main() { int t; list1 g; cin>>t; while(t--) { creat(g); Swap(g); bfs(g,k); cout<<endl; } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1307875.html
    最新回复(0)