7-7 六度空间 DFS + BFS DFS不能做的原因 + BFS的正确AC代码

本文探讨了在六度空间问题中,为何DFS可能导致最后一个样例失败,而BFS能够正确解决。在样例分析中,解释了DFS会因间接路径影响结果,而BFS能有效避免这种情况。提供了BFS的正确解决方案。
摘要由CSDN通过智能技术生成

  一开始我兴冲冲的用DFS交了一发,但是遇到很多人都遇到过的——最后一个样例没过。

  今天早上想了想,结果是因为DFS会把本来可以直接到达的点通过当前正在处理的直接连接的点给间接化了。
  样例(假设不是六度空间而是二度空间,最多走两步):
  4 4
  1 2
  1 3
  2 3
  3 4
  如果是DFS,会先通过2把3访问,那样到了3那一层DFS,4就不能被纳入了;此时vis[3]的值又已经被置为1,无法在1的DFS中被使用——从而失去了以3为跳板到4的机会。
—————————————————————————————————————————————————————————

代码:
AC·BFS
 

#include <bits/stdc++.h>
using namespace std;
#define maxn 10005
#define offset 1001
int vis[maxn],N,E;
vector<int> v[maxn];
int main()
{
    int i,j,k,t;
    cin>>N>>E;
    for(i=0;i<E;++i)
    {
        scanf("%d%d",&j,&k);
        v[j].push_back(k);
        v[k].push_back(j);
    }
    for(i=1;i<=N;++i)
    {
        memset(vis,0,sizeof(vis));
        queue<int> q;
        q.push(i
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值