#include<stdio.h>
#include<stdlib.h>
#define MAXN 10
typedef struct GNode *PtrToG;
struct GNode
{
int Nv;
int Ne;
int a[MAXN][MAXN];
};
int Visited[MAXN]={0};
PtrToG CreateGraph(int N,int E);
void DFS(PtrToG G,int Data);
void DFSShow(PtrToG G);
void BFS(PtrToG G,int Data);
void BFSShow(PtrToG G);
int main()
{
int N,E,i;
scanf("%d %d",&N,&E);
PtrToG G=CreateGraph(N,E);
DFSShow(G);
for(i=0;i<N;i++)Visited[i]=0;//忘记了将Visited还原成0
BFSShow(G);
return 0;
}
PtrToG CreateGraph(int N,int E)
{
PtrToG G=(PtrToG)malloc(sizeof(struct GNode));
G->Ne=E;
G->Nv=N;
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
G->a[i][j]=0;
}
}
int a,b;
for(i=0;i<E;i++)//此处应是i<E
{
//int a,b;可以放到循环外
scanf("%d %d",&a,&b);
G->a[a][b]=G->a[b][a]=1;
}
return G;
}
void DFS(PtrToG G,int Data)
{
int i;
printf(" %d",Data);//不知道为啥经常加&
Visited[Data]=1;;
for(i=0;i<G->Nv;i++)
{
if(G->a[Data][i]&&!Visited[i])
{
DFS(G,i);
}
}
}
void DFSShow(PtrToG G)
{
int i;
while(1)
{
for(i=0;i<G->Nv;i++)
{
if(!Visited[i])
break;
}
if(i==G->Nv)break;
printf("{");
DFS(G,i);
printf(" }\n");
}
}
void BFS(PtrToG G,int Data)
{
int queue[500];
int front,rear;
front=rear=0;
int i;
queue[++rear]=Data;
Visited[Data]=1;//忘记将Data标记
while(front!=rear)
{
int temp=queue[++front];
printf(" %d",temp);
for(i=0;i<G->Nv;i++)
{
if(G->a[temp][i]&&!Visited[i])
{
queue[++rear]=i;
Visited[i]=1;//忘记标记
}
}
}
}
void BFSShow(PtrToG G)
{
int i;
while(1)
{
for(i=0;i<G->Nv;i++)
{
if(!Visited[i])
break;
}
if(i==G->Nv)
break;
printf("{");
BFS(G,i);
printf(" }\n");
}
}
(浙江大学数据结构C语言实现)7-6 列出连通集 (25 分)
最新推荐文章于 2021-05-19 16:45:03 发布