java 数据结构 无向图_[数据结构]无向图的各连通分支 解题报告

Problem Description

求解无向图的各连通分支

输入:

第一行为图的节点数n(节点编号0至n-1,0

从第二行开始列出图的边,-1表示输入结束

输出:

输出每个连通分支的广度优先搜索序列(从连通分支的最小编号开始),不同分支以最小编号递增顺序列出

测试输入

8

0 5

5 2

4 5

5 6

6 2

3 7

0 2

-1

测试输出

0-5-2-4-6

1

3-7

AcCode

//

// main.cpp

// 无向图的各连通分支

//

// Created by jetviper on 2017/3/26.

// Copyright © 2017年 jetviper. All rights reserved.

//

#include

int n;

struct{

int vsd;

int bnum;

int linkto[18];

}node[18];

void bfs(int now){

int count=0,temp[18];

if(node[now].vsd==0){

node[now].vsd=1;

printf("%d",now);

}

for(int i=0;i

for(int j=i;j

if(node[now].linkto[i]>node[now].linkto[j]){

int tmp = node[now].linkto[i];

node[now].linkto[i] = node[now].linkto[j];

node[now].linkto[j] = tmp;

}

}

}

for(int i=0;i

if(node[node[now].linkto[i]].vsd==0) {

printf("-%d",node[now].linkto[i]);

node[node[now].linkto[i]].vsd = 1;

temp[count]=node[now].linkto[i];

count++;

}

}

for(int i=0;i

bfs(temp[i]);

}

}

int main() {

int x,y;

scanf("%d",&n);

for(int i=0;i

node[i].vsd=0;

node[i].bnum=0;

}

while(1){

scanf("%d",&x);

if(x==-1)break;

scanf("%d",&y);

node[x].linkto[node[x].bnum]=y;

node[x].bnum++;

node[y].linkto[node[y].bnum]=x;

node[y].bnum++;

}

for(int i=0;i

if(node[i].vsd==0) {

bfs(i);

printf("\n");

}

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值