2016-08-05 6 views
2

これは問題のステートメントです一連のチケットを並べ替える

出発と目的地のスタックには多数のチケットがあります。あなたは出発都市と目的地都市を与えられます。あなたのルートをどのようにスタックから見つけることができますか? これは

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

このプログラムは無限ループに入り、私の解決策です。私がデバッグすると、curr変数が定義されていないことがわかります。誰かが問題を解決するのを助けることができますか?私はJavascriptの新しいランクです。

+0

一つの問題は、 'であり、あなたのループではありません私はあなたがそれを期待していると思うことをしています。 – httpNick

+0

チケットの任意のセットに対して、解決策または多くの解決策が存在しない可能性があります。最短の解決策(チケット数または地理的距離による)はNP困難です。どのくらいそれを考慮に入れたいですか? – danh

+0

@ダン問題は解決策が存在することを期待しています。 –

答えて

0

私はしばらくあなたのコードをデバッグしていましたが、最後にinfinite loopの理由を特定しました。 pop-stackから、stackの長さが減少し続け、iの長さが長くなり、完了する前にループが停止します。そして、currdeptに決してなりません。mapにはLondonが含まれていないため、whileループはループを継続します。あなたは `(自分のスタックを修正する).popを()`呼び出しているsortDestinations`私が見

変更この

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

while(stack.length>0){ 
    var ticket = stack.pop(); 
    map[ticket.getDeparture()] = ticket.getDestination(); 
} 
+0

私はそれを修正しましたが、今は出力が得られません。どんなアイデアが間違っているのでしょうか? –

+0

どのように出力を見た目にしますか? – jonju

+0

謝罪が修正され、関数にreturn文が追加されました。 –

関連する問題