0

次の配列があります。

steps=[
    {from:1, to:8},
    {from:1, to:2},
    {from:2, to:7},
    {from:7, to:9},
    {from:8, to:9}
];

この配列は、2 点間の接続がどこにあるかを記述します。たとえば、1 から 7 には 1->2->7 という方法があります。

JavaScript では、たとえば 1 から 9 までの最短経路をどのように生成できますか?

更新しました

function calc_route(start, end, data)
    {           
        console.log(start+", "+end);
        console.log(data);              
        for(var i=0; i<data.length; i++)
        {

            if(data[i].topoint == end && data[i].frompoint == start)
            {
                console.log("Return");                  
                console.log(data[i]);
                return data[i];
            }
            else
            {
                if(data[i].frompoint == start)
                {                       
                    calcfor =   data.splice(i, 1);                                      
                    calc_route(calcfor[0].topoint, end, data);
                }
            }
        }
    }

これは私が今まで行ったことです。私の質問は、どうすればパスを保存できますか?

4

2 に答える 2

7

最小コストのパスを見つける標準的な方法は、A* アルゴリズム(ヒューリスティックな知識を使用できる) またはダイクストラのアルゴリズム(使用できない) のいずれかです。これらのリンクには両方とも、Javascript に簡単に変換できる疑似コードがあります。

于 2012-01-15T17:18:15.573 に答える
0

解決策は次のとおりです。

function calc_route(start, end, data, mypath, solution)
        {               
            mypath.push(parseInt(start));
            for(var i=0; i<data.length; i++)
            {

                if(data[i].topoint == end && data[i].frompoint == start)
                {
                    mypath.push(end);
                    solution.push(mypath);
                    return end;
                }
                else
                {

                    if(data[i].frompoint == start)
                    {                                   
                        calcfor =   data.slice(0);  
                        calcfor.splice(i,1);                                    
                        calc_route(data[i].topoint, end, calcfor, mypath.slice(0), solution);
                    }
                }
            }
        }
于 2012-01-16T19:58:03.200 に答える