基于邻接矩阵的广度优先搜索遍历

 

数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

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<string.h>

int map[110][110], vis[110],que[110];

int k,m,t,flag,tt;

void bfs(int t)

{

    int l=0,r=0,j;

    que[r++]=t;

    while(l<r)

    {

        tt=que[l++];

        if(flag==1)

        {

            printf("%d",tt);

            flag=0;

        }

        else printf(" %d",tt);

        for(j=0;j<k;j++)

        {

            if(map[tt][j]&&!vis[j])

            {

                vis[j]=1;

                que[r++]=j;

            }

        }

    }

}

int main ()

{

    int n,a,b,i;

    scanf("%d",&n);

    while(n--)

    {

        memset(map,0,sizeof(map));

        memset(vis,0,sizeof(vis));

        scanf("%d %d %d",&k,&m,&t);

        for(i=0;i<m;i++)

        {

            scanf("%d %d",&a,&b);

            map[a][b]=map[b][a]=1;

        }

        flag=1;

        vis[t]=1;

        bfs(t);

        printf("\n");

    }

    return 0;

}

 

你可能感兴趣的:(遍历)