广度优先搜索 BFS call your teacher题解 初学通俗版

这道题是想做并查集的,但是并查集的题解也都通不过欸。因为这个和朋友圈不一样,如果老师有手机号的人没有老师手机号,也还是照样联系不上,所以只能通过这个点所能走的路去走,而不是看他们在没在同一个圈子

bfs的思想

1 建图

2 找开始的点

3 找开始的点能走的点

4 能走的点找能走的点

5 做标记,找过了就不找了

6 终止条件,找到这个人了

题的思想

///表示bfs

//表示题

#include<bits/stdc++.h>
using namespace std;
int g[55][55];
int n,m;
int bfs()
{
	int vis[55]={0};  //为这个人做标记 
	queue<int>q;
	q.push(1);
	vis[1]=1;         //先把第一个人做标记 
	while(!q.empty())      ///队列不为空就可以继续进行 
	{
		int now=q.front();           ///bfs,搜索队头 
		q.pop();                     ///这个点就出队列 
		for(int j=1;j<=n;j++)        ///逐个搜索这个点附近能走的点 
		if(vis[j]==0&&g[now][j]==1) //这个人能联系到这个人并且这个人没有被搜索过 
		{                           //已经搜索过不是这个人就没有必要再次搜索了  
			vis[j]=1;                
			if(j==n) return 1;      ///终止条件 
			q.push(j);              ///这个能走的点就入队列 
		}
	 } 
	 return 0;
}
int main()
{
	
	while(~scanf("%d%d",&n,&m))
	{
		int x,y;
		memset(g,0,sizeof(g));
	     while(m--)
	     {
			cin>>x>>y;
			g[x][y]=1; ///建图 
		}
		if(bfs()) cout<<"Yes"<<endl;
		else cout<<"No"<<endl;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值