找出两地之间最短的路径(AI的算法)

netfox 9天前 146

现在AI能正确的辅助写aardio代码,语法上基本没有啥歧义了,真的是越来越好

var tab={
    昌意城={"天籁岛三";"百鬼井三";"常羊山一"};
    常羊山一={"昌意城";"常羊山三";"常羊山二"};
    常羊山二={"常羊山一";"迷幻云阶一";"十里津"};
    常羊山三={"常羊山一";"玉竹林一";"迷幻云阶一"};
    玉竹林一={"常羊山三";"玉竹林二";"禁锢云海一"};
    玉竹林二={"玉竹林一";"迷幻云阶一"};
    迷幻云阶一={"常羊山二";"常羊山三";"玉竹林二";"迷幻云阶二"};
    迷幻云阶二={"迷幻云阶一";"昆吾草原";"清凉世界";"雷泽一"};
    昆吾草原={"迷幻云阶二"};
};
import console

// 添加新的函数来查找最短路径
findShortestPath = function(start, destination) {
    var queue = {{start}};
    var visited = {[start] = true};
    var parent = {};
    
    while (#queue > 0) {
        var path = table.remove(queue, 1);
        var node = path[#path];
        
        if (node == destination) {
            return path;
        }
        
        for (i, neighbor in tab[node]) {
            if (!visited[neighbor]) {
                table.push(queue, table.concat(path, {neighbor}));
                visited[neighbor] = true;
                parent[neighbor] = node;
            }
        }
    }
    
    return null; // 如果没有找到路径
}

// 使用示例
var start = "昌意城";
var destination = "昆吾草原";
var shortestPath = findShortestPath(start, destination);

if (shortestPath) {
    console.log("从", start, "到", destination, "的最短路径是:");
    console.dump(string.join(shortestPath," => "))
} else {
    console.log("没有找到从", start, "到", destination, "的路径");
}

console.pause()


AI释义:

findShortestPath 函数

它使用广度优先(BFS)搜索算法来找出两个地点之间的最短路径。函数的参数是起点和终点,返回值是一个包含最短路径的表

群内大佬: 火柴天堂 手工搓的,都加了注释,感谢分享

import console; 
var tab={
昌意城={"天籁岛三";"百鬼井三";"常羊山一"};
常羊山一={"昌意城";"常羊山三";"常羊山二"};
常羊山二={"常羊山一";"迷幻云阶一";"十里津"};
常羊山三={"常羊山一";"玉竹林一";"迷幻云阶一"};
玉竹林一={"常羊山三";"玉竹林二";"禁锢云海一"};
玉竹林二={"玉竹林一";"迷幻云阶一"};
迷幻云阶一={"常羊山二";"常羊山三";"玉竹林二";"迷幻云阶二"};
迷幻云阶二={"迷幻云阶一";"昆吾草原";"清凉世界";"雷泽一"};
昆吾草原={"迷幻云阶二"};
};
 
var road = {} ; // 存放路径
var visted={};  //标记到达过的地点
var ans = 99999; //最小步数
var startNode,destNode = "昌意城","昆吾草原"  //
console.log(startNode,"-->",destNode)
show = function(data){  //输出
	var t=startNode;
for(i=1;#data;1){
	t= string.concat(t,"->",data[i]) 
}
   console.log(t)
}


findPath2 = function(current,dest,path){//当前点,目标点,轨迹;   
   var curLoc = tab[current] ;// 当前所在地
     if(curLoc == null)  return ;// 当前地点不存在返回; 
     visted[current]=true;   //当前地点标点为来过
     
   if( table.find(curLoc,dest) != null ){  //如果在当前节点中找到目标地点
           
   	     table.push(path,dest);
   	     console.log("当前方案结果:",#path)
          show(path);
   	     if(#path < ans ){//如果当前步数优于已有方案,替换
   	     	  road= path;ans=#path;
   	     } 
   	     return ; 
   }
    for(i=1;#curLoc;1){
        var nexNode = curLoc[i] 
        if( tab[nexNode] != null && !visted[nexNode] ){  //如果下一地点存在并且没有访问过
        	findPath2(curLoc[i],dest,table.concat(path,{curLoc[i]}) );//将当前节点添加到路径中 
        	visted[nexNode]=false;  //还原访问标记
        }
        
    	
    } 
}
findPath2(startNode,destNode,{});
console.log()
console.log("最佳方案花费步数:",ans)
show(road);

console.pause();


最新回复 (2)
  • 光庆 9天前
    0 2

  • netfox 8天前
    0 3
    光庆
    贴子都没人搞起来,哈哈,群里的,也搬过来了,当笔记
返回