如何通过BFS或DFS判断图结构中任意两个节点之间的可达性?

2026-04-11 21:182阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计507个文字,预计阅读时间需要3分钟。

如何通过BFS或DFS判断图结构中任意两个节点之间的可达性?

题目:图结构练习——BFS/DFS——判断可达性

时间限制:1000MS

内存限制:65536K

如何通过BFS或DFS判断图结构中任意两个节点之间的可达性?

题目描述:输入包含两个整数n和m,分别代表n个节点和m个连通关系。这些连通关系表示n个节点之间的连通性。

下面m行,每行包含两个整数a,表示两个节点之间存在直接连通关系。

要求:输出n个节点中任意两个节点是否可达。

输入:第一行包含两个整数n和m。下面m行,每行包含两个整数a,表示两个节点之间存在直接连通关系。

输出:对于每一对节点,输出YES表示可达,否则输出NO。


图结构练习——BFSDFS——判断可达性


Time Limit: 1000MS Memory limit: 65536K


题目描述



输入


第一行包含两个整数n,m(分别代表n个隘口,这些隘口之间有m个通道)。



下面m行每行包含两个整数a,b;表示从a出发有一条通道到达b隘口(注意:通道是单向的)。


输出



示例输入


2 1 1 2 2 1 2 1


示例输出


NO YES


提示



来源


赵利强


示例程序



#include<stdio.h> #include <stdlib.h> #include<memory.h> #define MAX 1000 int map[MAX][MAX],v[MAX]; int n,m; void DFS(int x) { int i; v[x] = 1; for(i=1;i<=n;i++) { if(!v[i] && map[x][i]==1) { DFS(i); } } } int main() { int x,i,y; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { v[i] = 0; } for(i=0;i<m;i++) { scanf("%d%d",&x,&y); map[x][y] = 1; } DFS(n); if(v[1]==1) { "YES\n"); } else { "NO\n"); } memset(v,0,sizeof(v)); memset(map,0,sizeof(map)); } return 0; }

本文共计507个文字,预计阅读时间需要3分钟。

如何通过BFS或DFS判断图结构中任意两个节点之间的可达性?

题目:图结构练习——BFS/DFS——判断可达性

时间限制:1000MS

内存限制:65536K

如何通过BFS或DFS判断图结构中任意两个节点之间的可达性?

题目描述:输入包含两个整数n和m,分别代表n个节点和m个连通关系。这些连通关系表示n个节点之间的连通性。

下面m行,每行包含两个整数a,表示两个节点之间存在直接连通关系。

要求:输出n个节点中任意两个节点是否可达。

输入:第一行包含两个整数n和m。下面m行,每行包含两个整数a,表示两个节点之间存在直接连通关系。

输出:对于每一对节点,输出YES表示可达,否则输出NO。


图结构练习——BFSDFS——判断可达性


Time Limit: 1000MS Memory limit: 65536K


题目描述



输入


第一行包含两个整数n,m(分别代表n个隘口,这些隘口之间有m个通道)。



下面m行每行包含两个整数a,b;表示从a出发有一条通道到达b隘口(注意:通道是单向的)。


输出



示例输入


2 1 1 2 2 1 2 1


示例输出


NO YES


提示



来源


赵利强


示例程序



#include<stdio.h> #include <stdlib.h> #include<memory.h> #define MAX 1000 int map[MAX][MAX],v[MAX]; int n,m; void DFS(int x) { int i; v[x] = 1; for(i=1;i<=n;i++) { if(!v[i] && map[x][i]==1) { DFS(i); } } } int main() { int x,i,y; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { v[i] = 0; } for(i=0;i<m;i++) { scanf("%d%d",&x,&y); map[x][y] = 1; } DFS(n); if(v[1]==1) { "YES\n"); } else { "NO\n"); } memset(v,0,sizeof(v)); memset(map,0,sizeof(map)); } return 0; }