You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中实现两用户间社交分离度及关联路径查询功能

Node.js 实现社交关系分离度查询与全路径查找方案

核心实现思路

该需求本质是无向图的全路径查找问题,好友关系为双向无权重边,基于广度优先搜索(BFS)实现即可,默认限制最大遍历深度为6,符合六度分隔理论要求。

步骤1:构建无向图邻接表

好友关系是双向关联,录入关系时需要双向添加邻接节点:

// 初始化邻接表存储所有用户的好友关系
const graph = new Map();

// 添加双向好友边的工具函数
function addFriendRelation(userA, userB) {
  if (!graph.has(userA)) graph.set(userA, []);
  if (!graph.has(userB)) graph.set(userB, []);
  graph.get(userA).push(userB);
  graph.get(userB).push(userA);
}

// 录入题目给出的所有好友关系
addFriendRelation('Sameer', 'Aayushi');
addFriendRelation('Aayushi', 'Bhaskar');
addFriendRelation('Sameer', 'Kamalnath Sharma');
addFriendRelation('Kamalnath Sharma', 'Shanti Kumar Saha');
addFriendRelation('Shanti Kumar Saha', 'Bhaskar');

步骤2:实现全路径查找逻辑

基于BFS遍历,每个队列节点存储当前遍历路径,自动过滤环路,超出最大深度直接停止扩展:

/**
 * 查找两个用户之间的所有关联路径
 * @param {string} startUser 起点用户名
 * @param {string} endUser 终点用户名
 * @param {number} maxDepth 最大遍历深度,默认6符合六度分隔要求
 * @returns {Array<string[]>} 所有符合要求的路径数组
 */
function findAllRelationPaths(startUser, endUser, maxDepth = 6) {
  const resultPaths = [];
  // BFS队列,每个元素为当前遍历的路径数组
  const queue = [[startUser]];

  while (queue.length) {
    const currentPath = queue.shift();
    const currentNode = currentPath.at(-1);

    // 到达终点,将路径加入结果集
    if (currentNode === endUser) {
      resultPaths.push(currentPath);
      continue;
    }

    // 超出最大深度,不再扩展当前路径
    if (currentPath.length >= maxDepth) continue;

    // 遍历当前用户的所有好友,生成新路径入队
    const friends = graph.get(currentNode) || [];
    for (const friend of friends) {
      // 过滤环路,避免重复访问路径中已存在的用户
      if (!currentPath.includes(friend)) {
        queue.push([...currentPath, friend]);
      }
    }
  }

  return resultPaths;
}

步骤3:功能测试与输出

// 测试查询Sameer到Bhaskar的所有关联路径
const paths = findAllRelationPaths('Sameer', 'Bhaskar');

// 格式化输出结果
paths.forEach(path => {
  console.log(path.join(' > '));
});

运行输出结果

  • Sameer > Aayushi > Bhaskar
  • Sameer > Kamalnath Sharma > Shanti Kumar Saha > Bhaskar

优化提示

  • 处理大规模社交关系时,可替换为双向BFS实现,同时从起点和终点双向遍历,大幅降低遍历范围,提升查询效率
  • 可对路径长度进行排序,默认输出最短路径在前的结果

内容的提问来源于stack exchange,提问作者Pinak faldu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:54:05