(浙江大学数据结构C语言实现)7-6 列出连通集 (25 分)

#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");
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值