很简单的把联通集用DFS,BFS输出,没有什么难度,一遍过,都是基础操作。
//不就是DFS BFS 遍历嘛 邻接矩阵存一下 简简单单
#include<stdio.h>
int mp[20][20];
int B[20];
int D[20];
int N,E;
void DFS(int v)//处理当前位置
{
if(!D[v])
{
printf(" %d",v);
D[v]=1;
}else return;
for (int i = 0;i<N;i++)
{
if (mp[v][i] && D[v]) DFS(i);
}
}
int Q[20];
int front = -1,rear = -1;
void push(int x)
{
Q[++rear] = x;
}
int pop()//取出队首元素且释放掉
{
return Q[++front];
}
void BFS(int v)
{
push(v);
B[v]=1;
while (rear!=front)
{
int u = pop();
printf (" %d",u);
for (int i = 0;i<N;i++)
{
if (mp[u][i] && !B[i])
{
push(i);
B[i]=1;
}
}
}
}
int main()
{
scanf ("%d%d",&N,&E);
while (E--)
{
int a,b;
scanf ("%d%d",&a,&b);
mp[a][b]=1;
mp[b][a]=1;
}
for (int i = 0;i<N;i++)//DFS 深度 遍历 完成
{
if (!D[i])
{
printf ("{");
DFS(i);
printf(" }\n");
}
}
for (int i = 0;i<N;i++)//BFS 广度 遍历 完成
{
if (!B[i])
{
printf ("{");
BFS(i);
printf(" }\n");
}
}
return 0;
}
无论是邻接矩阵还是邻接表,基本操作都是类似的,但是我感觉联通表还是困难一些的。