Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 分类一系列的票_Javascript - Fatal编程技术网

Javascript 分类一系列的票

Javascript 分类一系列的票,javascript,Javascript,这是问题陈述 你有一堆票,上面有出发点和目的地。您将获得出发城市和目的城市。如何从堆栈中找到路线。 这是我的解决方案 "use strict"; function app(){ var stack = []; var one = new Ticket('London', 'NYC'); var two = new Ticket('Barcelona', 'Athens'); var three = new Ticket('Rio', 'ND'); v

这是问题陈述

你有一堆票,上面有出发点和目的地。您将获得出发城市和目的城市。如何从堆栈中找到路线。 这是我的解决方案

"use strict";


function app(){

    var stack = [];
    var one = new Ticket('London', 'NYC');
    var two = new Ticket('Barcelona', 'Athens');
    var three = new Ticket('Rio', 'ND');
    var four = new Ticket('NYC', 'Barcelona');
    var five = new Ticket('Athens', 'Rio');
    var six = new Ticket('ND', "Lahore");
    stack.push(one);
    stack.push(two);
    stack.push(three);
    stack.push(four);
    stack.push(five);
    stack.push(six);

    var res = sortDestinations(stack, 'London', 'Lahore');
    for(var city in res){
        console.out(res[city]);
    }

}
function Ticket(departure, destination){

    this.departure = departure;
    this.destination = destination;
}

Ticket.prototype.getDeparture = function(){
    return this.departure;
}

Ticket.prototype.getDestination = function(){
    return this.destination;
}


function sortDestinations(stack, dep, dest){
    var map = {};
    for(var i= 0; i<stack.length; i++){
        var ticket = stack.pop();
        map[ticket.getDeparture()] = ticket.getDestination();
    }
    var res = [];
    var curr = dep;
    res.push(curr);

    while(true){
        if(curr == dest) {
            break;
        }
        var next = map[curr];
        res.push(next);
        curr = next;
    }

}

app();
“严格使用”;
函数app(){
var堆栈=[];
var one=新机票(“伦敦”、“纽约”);
var 2=新门票(“巴塞罗那”、“雅典”);
var三=新票('Rio','ND');
var四=新机票(“纽约”、“巴塞罗那”);
var five=新机票(‘雅典’、‘里约’);
var six=新票('ND',“拉合尔”);
栈。推(一);
栈.推(二);
栈。推(三);
栈。推(四);
栈。推(五);
推(六);
var res=排序估计(堆栈、“伦敦”、“拉合尔”);
for(以res表示的var城市){
console.out(res[城市]);
}
}
功能票(出发、目的地){
这个。出发=出发;
this.destination=目的地;
}
Ticket.prototype.getDeviation=函数(){
退票,离开;
}
Ticket.prototype.getDestination=函数(){
返回此目的地;
}
功能排序估计(堆栈、dep、dest){
var-map={};

对于(var i=0;i我调试了您的代码一段时间,最后确定了
无限循环的原因。
由于您是从
stack
开始的
pop
stack
的长度不断减少,而
i
的长度不断增加,循环在完成之前停止。而您的
while
循环保持循环,因为
curr
永远不会等于
dept
,因为
map
不包含
London

改变这个

for(var i= 0; i<stack.length; i++){
    var ticket = stack.pop();
    map[ticket.getDeparture()] = ticket.getDestination();
}

我看到的一个问题是,您正在调用
.pop()
(它修改了堆栈),而您的循环没有达到我认为您期望的效果。对于任意一组票证,可能没有解决方案或有许多解决方案。最短的解决方案(根据票证数量或地理距离)是NP难的。你希望考虑其中的多少?@danh这个问题希望有一个解决方案。我已经解决了,但现在它不会产生输出。你知道可能有什么问题吗?你希望输出是什么样子吗?抱歉已经解决,在函数中添加了一个返回语句。
while(stack.length>0){
    var ticket = stack.pop();
    map[ticket.getDeparture()] = ticket.getDestination();
}