什么都想学的小白菜 2023-11-08 13:25 采纳率: 87.5%
浏览 3
已结题

排序算法/排序算法=排序算法


let a = [ { name: 'a' }, { name: 'b' }, { name: 'a-b' }, { name: 'b-x', }, { name: 'x' }, { name: 'g' }, { name: 'x-g' }] 
let result = [ { name: 'a' }, { name: 'a-b' }, { name: 'b' }, { name: 'b-x', }, { name: 'x' }, { name: 'x-g' }, { name: 'g' }]

求一个 算法, 从 a数组 能得出 result 数组, 每个元素的相邻元素都是根据名称连接关系的顺序

  • 写回答

2条回答 默认 最新

  • 呈两面包夹芝士 2023-11-08 13:47
    关注
    let a = [ { name: 'a' }, { name: 'b' }, { name: 'a-b' }, { name: 'b-x', }, { name: 'x' }, { name: 'g' }, { name: 'x-g' }]
    
    // 创建图
    let graph = {};
    for (let i = 0; i < a.length; i++) {
        graph[a[i].name] = [];
    }
    for (let i = 0; i < a.length - 1; i++) {
        let node1 = a[i].name;
        let node2 = a[i + 1].name;
        if (!node2.startsWith(node1)) {
            graph[node1].push(node2);
        }
    }
    
    // 拓扑排序
    function topologicalSort(graph) {
        let result = [];
        let visited = {};
        for (let node in graph) {
            if (!visited[node]) {
                dfs(graph, node, visited, result);
            }
        }
        return result;
    }
    
    function dfs(graph, node, visited, result) {
        visited[node] = true;
        for (let neighbor of graph[node]) {
            if (!visited[neighbor]) {
                dfs(graph, neighbor, visited, result);
            }
        }
        result.unshift(node);
    }
    
    let result = topologicalSort(graph);
    console.log(result);
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月16日
  • 已采纳回答 11月8日
  • 创建了问题 11月8日

悬赏问题

  • ¥15 求达梦8数据库安装包
  • ¥15 YOLOv8模型网络结构更改后报错
  • ¥15 深度学习中梯度为None
  • ¥15 zynq烧写程序到flash后不运行
  • ¥15 (标签-51单片机|关键词-#include)
  • ¥15 裸板ESD问题的思考与实验
  • ¥15 electron+python
  • ¥50 远程调试PLC的解决方案的问题
  • ¥15 微信收付通中,自动分账的情况下,某一接收方分账失败了系统会自动在发起重新分账吗
  • ¥15 宝塔ssl证书一直待待验证