首页 > 试题广场 >

回路

[编程题]回路
  • 热度指数:7601 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛牛在一个迷宫中,迷宫有 个格子,有 条通道,每条通道连接两个格子 , ,编号为 的格子与编号为 的格子可互相到达,每人每条通道只能走一次。
牛牛想知道,他是否能从 号格子出发回到  号格子

若能回到  号格子则返回Yes,否则返回No。

示例1

输入

[4, 4],[(1,2), (2, 3), (3,4),(4,1)]

输出

"Yes"

备注:

m对 u, v 互不相同
邻接表解法
/*
 * function Point(a, b){
 *   this.x = a || 0;
 *   this.y = b || 0;
 * }
 */

/**
  * 能回到1号点返回 Yes,否则返回 No
  * @param param int整型一维数组 param[0] 为 n,param[1] 为 m
  * @param edge Point类一维数组 Point.x , Point.y 分别为一条边的两个点
  * @return string字符串
  */
var visited = {};
var flag = true;
function solve( param ,  edge ) {
    // write code here
    let map = {};
    let reachAble = false;
    edge.forEach((el)=>{
        if(map[el.x] === undefined){
            map[el.x] = [el.y];
        }else{
            map[el.x].push(el.y);
        }
        if(!reachAble&&el.y===1){
            reachAble = true;
        }
    })
    if(!reachAble){
        return "No";
    }
    if(map[1]){
        dfs(1,map);
    }else{
        return "No";
    }
    
    
    if(!flag){
        return "Yes";
    }
    return "No";
    
}
function dfs(postion,map){
    if(postion === 1){
        flag = false;
    }
    if(!flag){
        return;
    }
    let paths = map[postion];
    if(!paths){
        return;
    }
    for(let i = 0; i<paths.length;i++){
        let po = paths[i];
        if(!visited[po]){
            visited[po] = true;
            dfs(po,map);
        }
    }
}

module.exports = {
    solve : solve
};


发表于 2020-08-02 21:56:59 回复(0)