Question

hello i'd like to ask some javascript code in finding path using algorithm A*. the path will have source node and target node, and here's the example code

do{
    var cursor = nodes.node1 //this is source node
    for (var i in GexfJS.graph.edgeList) { // search all edgeList on graph
        var _e = GexfJS.graph.edgeList[i] //each list has variable _e
        var position = []; // where i put the pointer
        if ( _e.source == cursor ) { //when some edge source is match from the cursor(source node/initial node)
            var _n = GexfJS.graph.nodeList[_e.target]; // edge target from the node which match with the cursor
            _str += 'Found '; // just give string if it's works
            position.push(_e.target); // for pointer?
            cursor = _e.target // go to the next node, but how can i move to previos node?
            }
    }
} while(cursor!=nodes.node2); //until find the target node

the problem is im using position.push and it is array but i can't implement the pointer, if its has move next or move previous when finding path to the target node. thanks

Was it helpful?

Solution

maybe you don't need push position.push(_e.target); , just let the cursor in to the end , after the cursor hasn't more target , you can initial the cursor to back to the first node and don't forget each node you visit has to be set to be true

OTHER TIPS

i have the answer for this, initial the cursor from the first node until the target node and don't forget each node you visit has to be set to be true if the node has visited, then go back again try to finding the first edges from the nodes, if the node hasn't true go to the next node, if the node has true find other node. here's my example code

pathed={};
            ketemu=false;
            cursor1="";
            if(path==true){
            while(ketemu!=true){
                var cursor = nodes.node1;
                var lala = new Array();
                var visit = new Array();
                var j = 0;
                for (var i in GexfJS.graph.edgeList) { // relasi yang dituju 
                    var _e = GexfJS.graph.edgeList[i];
                    if ( _e.source == cursor ) {
                        var _n = GexfJS.graph.nodeList[_e.target];
                        if(pathed[_n.label] != true){
                            if(_e.target==nodes.node2){

                            cursor = _e.target;
                            cursor1 = _e.target;
                            lala[j] = cursor;
                            visit[j] = cursor;
                            j++;

                            ketemu=true;
                            break;
                            }

                             if(_e.target !=nodes.node2){

                                cursor = _e.target;
                                lala[j] = cursor;
                                visit[j] = cursor;
                                j++;
                            }


                            //alert(cursor);
                            //alert(lala[j]);

                        }

                    }
                    //else if(cursor1==_e.target){
                    //cursor = nodes.node1;
                    //alert(cursor);
                    //}


                }
                if(ketemu!=true){
                i=0;
                for(var j=lala.length-1;j>=0;j--){
                var test = lala.length-1;
                var ujung = lala[test];
                var koyong = nodes.node1;

                i++;

                }

                ujung = GexfJS.graph.nodeList[ujung];
                pathed[ujung.label] = true;
                cursor = koyong;

                }

            }

                for(var k=0;k<visit.length;k++){
                var visitednya = visit[k];
                var _n = GexfJS.graph.nodeList[visitednya];
                _str += '<li><div class="smallpill" style="background: ' + _n.color.base +'"></div><a href="#" onmouseover="GexfJS.params.activeNode = ' + _e.source + '" onclick="displayNode(' + _e.source + ', true); return false;">' + _n.label + '</a>' + ( GexfJS.params.showEdgeWeight && _e.weight ? ' [' + _e.weight + ']' : '') + '</li>';
                }
                visit=[];



            //end
            }

thanks

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top