#include<stdio.h>
#include<stdlib.h>
#include<cstdio>
#include<iostream>
#include<stack>
#include<queue>
#include<string.h>
using namespace std;
#define MaxVerNum 100
queue<int> q;
typedef struct GNode *PtrToGNode;
struct GNode
{
int Edgs[MaxVerNum][MaxVerNum];
int Vnum,Enum;
int Visited[MaxVerNum];
}Graph;
typedef PtrToGNode MGraph;
MGraph CreateGraph()
{
MGraph G;
G = (MGraph)malloc(sizeof(Graph));
int n,e;
cin>>n>>e;
G->Vnum=n;
G->Enum=e;
for(int i=0;i<G->Vnum;i++)
for(int j=0;j<G->Vnum;j++)
{
G->Edgs[i][j]=0;
G->Visited[i]=0;
G->Edgs[i][i]=1;
}
int a,b;
for(int i=1;i<=G->Enum;i++)
{
scanf("%d%d",&a,&b);
G->Edgs[a][b]=G->Edgs[b][a]=1;
}
return G;
}
void DFS(MGraph G, int v)
{
for(int i=0;i<G->Vnum;i++)
{
if(G->Visited[i]==0&&G->Edgs[v][i]==1)
{
printf(" %d",i);
G->Visited[i]=1;
DFS(G,i);
}
}
}
void BFS(MGraph G, int v)
{
for(int i=0;i<G->Vnum;i++)
{
if(G->Visited[i]==0&&G->Edgs[v][i]==1)
{
printf(" %d",i);
G->Visited[i]=1;
q.push(i);
}
}
while(!q.empty())
{
int a=q.front();
q.pop();
BFS(G,a);
}
}
void Print(MGraph G)
{
for(int i=0;i<G->Vnum;i++)
{
if(G->Visited[i]==0)
{
printf("{");
DFS(G,i);
printf(" }\n");
}
}
for(int j=0;j<G->Vnum;j++)
{
G->Visited[j]=0;
}
for(int i=0;i<G->Vnum;i++)
{
if(G->Visited[i]==0)
{
printf("{");
BFS(G,i);
printf(" }\n");
}
}
}
int main()
{
MGraph G;
G=CreateGraph();
Print(G);
return 0;
}
列出连通集
最新推荐文章于 2023-03-26 21:52:11 发布