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();
}