为了账号安全,请及时绑定邮箱和手机立即绑定

检查数组中连接关系是否有往回连接?

检查数组中连接关系是否有往回连接?

PHP
慕工程0101907 2019-03-06 05:03:37
问题描述假如一个储存有连线数据的数组,例:1->2->3-4let link = [     {from:1,to:2},     {from:2,to:3},     {from:3,to:4}, ];需要判断检查数组中的数据是否有往回连接的情况,比如发生了1->2->3->1这种情况。捣鼓了半天我写的代码如下(不考虑两个点之间有重复连接和互相连接的情况下):// 测试数据let link = [     {from:3,to:4},     {from:3,to:5},     {from:2,to:4},     {from:2,to:3},     {from:1,to:2},     {from:2,to:5} ];// 检查每一条线路是否有往回连接function checkLine(arr,data){    let _to = arr[arr.length-1];    for(let j=0;j<data.length;j++){        if(data[j].from === _to){            if(arr.indexOf(data[j].to)!==-1){                 flag = true;             }else{                 arr.push(data[j].to);                let _data = data.filter(item=>(item.from!==data[j].from && item.to!==data[j].to));                 checkLine(arr,_data);                return;             }         }     } }// 标记是否有往回连接的情况let flag = false;// 开始for(let i=0;i<link.length;i++){    let arr = [];     arr.push(link[i].from,link[i].to);    let _data = link.filter(item=>(item.from!==link[i].from && item.to!==link[i].to));     checkLine(arr,_data); }if(flag===true){    console.log("出错"); }上面的代码简单的测试了下应该没问题,但是我自己看着都有点乱,有没有什么更好的方法或者JS的新特性可以更快的解决这个问题。
查看完整描述

1 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

转成有向图,然后遍历即可。有向图的遍历过程中自动就能检查回路的情况

查看完整回答
反对 回复 2019-03-28
  • 1 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信