Erik
%Europe/Berlin %719 %2005, 18:15
Ik heb een probleem met mijn pathfinding, dauntless heeft mij al veel geholpen, maar het lukt nog niet helemaal, ik wil dus dat hij de kortste weg terug geeft, en in connections staan alle connecties; van punt A kan je naar B en G, en van B weer naar A en C etc...
het script:
var connections:Object = {A:["B", "G"], B:["A", "C"], C:["D", "B"], D:["E", "C"], E:["F", "D"], F:["G", "E"], G:["A", "F"]};
var begin:String = "A";
var end:String = "F";
var visited:Array = new Array();
var pathFound:Boolean = false;
var path = new Array();
function getFastestPath(c:String, e:String, path:Array) {
visited.push(c);
var a = findPath(c, e, path);
visited = new Array();
pathFound = false;
path = new Array();
visited.push(c);
var b = findPath(e, c, path);
if (a.length<b.length) {
return (a);
} else {
return (b.reverse());
}
}
function findPath(c:String, e:String, path:Array):Array {
var subs:Array = connections[c];
for (var i:Number = 0; i<subs.length; i++) {
trace(i+" many times");
if (!isVisited(subs[i]) && !pathFound) {
setVisited(subs[i]);
if (subs[i] == e) {
pathFound = true;
trace("end found!!-> "+subs[i]);
var tmp:Array = path;
tmp.push(subs[i]);
trace("Word terug gestuurd: "+tmp.toString());
return tmp;
} else {
var tmp:Array = path;
tmp.push(subs[i]);
trace("Wordt terug gestuurt: "+tmp);
return findPath(subs[i], e, tmp);
}
}
}
}
function isVisited(item:String):Boolean {
for (var i in visited) {
if (visited[i] == item) {
return true;
}
}
return false;
}
function setVisited(item:String):Void {
visited.push(item);
}
getFastestPath(findPath(begin, end, path).toString());
Nou geeft hij a wel terug, maar b niet.. en het zal waarschijnlijk wel weer een domme fout zijn, maar met een kater los je het niet zo gouw op |)
Ik hoop dat jullie me kunnen helpen, Greetz Erik!
het script:
var connections:Object = {A:["B", "G"], B:["A", "C"], C:["D", "B"], D:["E", "C"], E:["F", "D"], F:["G", "E"], G:["A", "F"]};
var begin:String = "A";
var end:String = "F";
var visited:Array = new Array();
var pathFound:Boolean = false;
var path = new Array();
function getFastestPath(c:String, e:String, path:Array) {
visited.push(c);
var a = findPath(c, e, path);
visited = new Array();
pathFound = false;
path = new Array();
visited.push(c);
var b = findPath(e, c, path);
if (a.length<b.length) {
return (a);
} else {
return (b.reverse());
}
}
function findPath(c:String, e:String, path:Array):Array {
var subs:Array = connections[c];
for (var i:Number = 0; i<subs.length; i++) {
trace(i+" many times");
if (!isVisited(subs[i]) && !pathFound) {
setVisited(subs[i]);
if (subs[i] == e) {
pathFound = true;
trace("end found!!-> "+subs[i]);
var tmp:Array = path;
tmp.push(subs[i]);
trace("Word terug gestuurd: "+tmp.toString());
return tmp;
} else {
var tmp:Array = path;
tmp.push(subs[i]);
trace("Wordt terug gestuurt: "+tmp);
return findPath(subs[i], e, tmp);
}
}
}
}
function isVisited(item:String):Boolean {
for (var i in visited) {
if (visited[i] == item) {
return true;
}
}
return false;
}
function setVisited(item:String):Void {
visited.push(item);
}
getFastestPath(findPath(begin, end, path).toString());
Nou geeft hij a wel terug, maar b niet.. en het zal waarschijnlijk wel weer een domme fout zijn, maar met een kater los je het niet zo gouw op |)
Ik hoop dat jullie me kunnen helpen, Greetz Erik!