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

来源:互联网 发布:知吾煮抗摔玻璃保鲜盒 编辑:程序博客网 时间:2024/06/05 10:22

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顶点的无向边。

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

Hint

用邻接表存储。

#include<stdio.h>#include<stdlib.h>#include<string.h>struct mapp{    int data;    mapp *next;};mapp *m[1000];void creat(int x, int y){    if(m[x] == '\0')    {        m[x] = new mapp;        mapp *p;        p = new mapp;        m[x] ->next = p;        p ->data = y;        p ->next = NULL;    }    else    {        mapp *p = m[x];        mapp *q = p ->next;        while(y > q ->data)        {            q = q ->next;            p = p ->next;            if(q == NULL)                break;        }        mapp *o;        o = new mapp;        o ->data = y;        o ->next = q;        p ->next = o;    }}void bfs(int t, int k){    int line[1000];    line[0] = t;    int i = 0;    int j = 1;    int flag[1000] = {0};    flag[t] = 1;    while(i < j)    {        mapp *p = m[line[i]] ->next;        while(p)        {            if(flag[p ->data])                ;            else            {                flag[p ->data] = 1;                line[j++] = p ->data;            }            p = p ->next;        }        i++;    }    for(i = 0; i < k - 1; i++)        printf("%d ", line[i]);    printf("%d\n", line[i]);}void F(int k){    int i;    mapp *p;    mapp *q;    for(i = 0; i < k; i++)    {        if(m[i] != NULL)        {            p = m[i];            q = p ->next;            while(q)            {                free(p);                p = q;                q = q ->next;            }            free(p);        }        else            continue;    }}int main(){    int n;    int k, M, t;    scanf("%d", &n);    while(n--)    {        scanf("%d %d %d", &k, &M, &t);        while(M--)        {            int x, y;            scanf("%d %d", &x, &y);            creat(x, y);            creat(y, x);        }        bfs(t, k);        F(k);    }    return 0;}


阅读全文
0 0