ZJNU-1416(图的建立与遍历)

该博客介绍了如何使用邻接矩阵创建图,并详细讲解了通过深度优先搜索(DFS)和广度优先搜索(BFS)遍历图的方法。题目要求从节点0开始遍历,并给出了样例输入和输出。内容涵盖了图的基本操作和两种常见遍历策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1416:

按邻接矩阵的方法创建图,分别用深度优先和广度优先方法遍历图。

Input

输入的数据有多组
对于每组测试数据第一行为图中点的个数n(0 < n < 100)与边的数量m(m > =0)。
接下来有m行,每行两个整数a,b(0 <=a,b < n),代表这a,b这两个点之间是连通的。

Output

分别输出按照深度优先搜索与广度优先搜索方法遍历的结果,每个输出结果后面都有一空行。

Sample Input

3 0 5 3 0 1 0 4 1 3

Sample Output

0 1 2 0 1 2 0 1 3 4 2 0 1 4 3 2

这道题实际上就是图的遍历。

但是要注意是从0开始的。

#include<stdio.h>
#include<string.h>
int n,sum,book[101],e[101][101];
void dfs(int cur){
	int i;
	printf("%d ",cur);
	sum++;
	if(sum==n-1) return;
	for(i=0;i<n;i++){
		if(book[i]==0&&e[cur][i]==1){
			book[i]=1;
			dfs(i);
		}
	}
}
int main(){
	int m,a,b,i,j;
	while(scanf("%d%d",&n,&m)!=EOF){
		//初始化表;
		for(i=0;i<n;i++)
			for(j=0;j<m;j++){
				if(i==j) e[i][j]=0;
				else e[i][j]=9;
			} 
		for(i=0;i<m;i++){
			scanf("%d%d",&a,&b);
			e[a][b]=1;
			e[b][a]=1;
		}
		//dfs
		book[0]=1;
		dfs(0);
		for(i=0;i<n;i++){
			if(book[i]==0) printf("%d ",i);
		}
		printf("\n");
		//bfs
		memset(book,0,sizeof(book));
		int head,tail,que[10001]={0};
		head=tail=0;
		que[tail]=0;
		tail++;
		book[0]=1;
		while(head<tail){
			int cur=que[head];
			for(i=0;i<n;i++){
				if(book[i]==0&&e[cur][i]==1){
					book[i]=1;
					que[tail]=i;
					tail++;
				}
				if(tail>n) break;
			}
			head++;
		}
		for(i=0;i<tail;i++)
			printf("%d ",que[i]);
		for(i=0;i<n;i++){
			if(book[i]==0) printf("%d ",i);
		}
		printf("\n\n");
	}
}

里面包含了dfs和bfs两种方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值