Algorithm 如何使用AI查找点之间的最短路径?

Algorithm 如何使用AI查找点之间的最短路径?,algorithm,artificial-intelligence,Algorithm,Artificial Intelligence,我试图通过在计算机上解决问题来提高我的人工智能知识 问题之一是: 桃子公主被困在正方形网格的四个角之一。 您位于网格的中心,可以在网格中一次移动一步 四个方向中的任何一个。你能救公主吗 详情如下 我需要一个提示来系统地解决这个问题。 这是最短路径问题吗? 或者AI的哪些算法/概念可以用来解决这个问题 谢谢。这里的节点是网格中的单元,边可以在单元之间移动 最简单的解决方案是使用a(因为图形未加权)。一个改进是使用一个新的 一个面向人工智能的改进是使用一个知情的算法,例如。你需要一个函数来使用它,你

我试图通过在计算机上解决问题来提高我的人工智能知识

问题之一是:

桃子公主被困在正方形网格的四个角之一。 您位于网格的中心,可以在网格中一次移动一步 四个方向中的任何一个。你能救公主吗

详情如下

我需要一个提示来系统地解决这个问题。 这是最短路径问题吗? 或者AI的哪些算法/概念可以用来解决这个问题

谢谢。

这里的节点是网格中的单元,边可以在单元之间移动

最简单的解决方案是使用a(因为图形未加权)。一个改进是使用一个新的

一个面向人工智能的改进是使用一个知情的算法,例如。你需要一个函数来使用它,你能想出任何一个吗?(有一个经典的众所周知的例子,但我会让你自己去弄清楚。)

这就是,节点是网格中的单元,边可以从一个单元移动到另一个单元

最简单的解决方案是使用a(因为图形未加权)。一个改进是使用一个新的

一个面向人工智能的改进是使用一个知情的算法,例如。你需要一个函数来使用它,你能想出任何一个吗?(有一个经典的众所周知的例子,但我会让你自己去弄清楚。)

这就是,节点是网格中的单元,边可以从一个单元移动到另一个单元

最简单的解决方案是使用a(因为图形未加权)。一个改进是使用一个新的

一个面向人工智能的改进是使用一个知情的算法,例如。你需要一个函数来使用它,你能想出任何一个吗?(有一个经典的众所周知的例子,但我会让你自己去弄清楚。)

这就是,节点是网格中的单元,边可以从一个单元移动到另一个单元

最简单的解决方案是使用a(因为图形未加权)。一个改进是使用一个新的


一个面向人工智能的改进是使用一个知情的算法,例如。你需要一个函数来使用它,你能想出任何一个吗?(有一个经典的众所周知的例子,但我会让你自己去弄清楚)。

有点晚了,但出于好奇,我在php中尝试了这个方法,首先得到公主的位置,然后是马里奥的位置,然后是一个循环来移动马里奥。这赢得了比赛,但这不是最快的方式,尤其是当网格很大的时候

        function displayPathtoPrincess($m, $grid) {
            //get mario and princesses locations
            $gridstring = implode('', $grid);
            $p = strpos($gridstring, 'p') + 1;
            $m = strpos($gridstring, 'm') + 1;

            $positioncount = 0;

            //get marios and princess xy location
            for ($x = 0; $x < count($grid); $x ++) {
                for ($y = 0; $y < count($grid); $y ++) {
                    $positioncount ++;
                    if ($positioncount == $m) {
                        $mario[0] = $x;
                        $mario[1] = $y;
                    }

                    if ($positioncount == $p) {
                        $princess[0] = $x;
                        $princess[1] = $y;
                    }

                    if (isset($mario) > 0 && isset($princess) > 0)
                        break;
                }
            }


        //Find princess
            $moves = '';
            for ($x = 0; $x < count($grid); $x ++) {
                for ($y = 0; $y < count($grid); $y ++) {
                    //if at marios location ...

                    if ($mario[0] == $x && $mario[1] == $y) {
                        $updownmove = $princess[0] - $mario[0];

                        if ($updownmove < 0) {
                            for (; $updownmove < 0; $updownmove++) {
                                $newposition = $mario[0] - 1;
                                if ($newposition >= 0) {
                                    $mario[0] = $newposition;

                                    if (trim($moves) != '') {
                                        $moves .= "\n";
                                    }
                                    $moves .= "UP";
                                }
                            }
                        } else {
                            for (; $updownmove > 0; $updownmove--) {
                                $mario[0] = $mario[0] + 1;
                                if (trim($moves) != '') {
                                    $moves .= "\n";
                                }
                                $moves .= "DOWN";
                            }
                        }

                        $rightleftmove = $princess[1] - $mario[1];
                        if ($rightleftmove < 0) {
                            for (; $rightleftmove < 0; $rightleftmove++) {
                                $newposition = $mario[1] - 1;
                                if ($newposition >= 0) {
                                    $mario[1] = $newposition;

                                    if (trim($moves) != '') {
                                        $moves .= "\n";
                                    }
                                    $moves .= "LEFT";
                                }
                            }
                        } else {
                            for (; $rightleftmove > 0; $rightleftmove--) {
                                $mario[1] = $mario[1] + 1;
                                if (trim($moves) != '') {
                                    $moves .= "\n";
                                }
                                $moves .= "RIGHT";
                            }
                        }
                    }

                    if (isfound($mario, $princess)) {
                        echo $moves;
                        return;
                    }
                }
            }
        }

        function isfound($mario, $princess) {
            if (count($mario) == 0)
                return false;
            if (($mario[0] == $princess[0]) && ($mario[1] == $princess[1])) {
                return true;
            } else {
                return false;
            }
        }
函数displayPathtoPrincess($m,$grid){
//找到马里奥和公主的位置
$gridstring=内爆(“”,$grid);
$p=strpos($gridstring,'p')+1;
$m=strpos($gridstring,'m')+1;
$positioncount=0;
//获取马里奥和公主xy的位置
对于($x=0;$x0&&isset($princess)>0)
打破
}
}
//找到公主
$moves='';
对于($x=0;$x=0){
$mario[0]=$newposition;
如果(修剪($移动)!=''){
$moves.=“\n”;
}
$moves.=“向上”;
}
}
}否则{
对于(;$updownmove>0;$updownmove--){
$mario[0]=$mario[0]+1;
如果(修剪($移动)!=''){
$moves.=“\n”;
}
$moves.=“向下”;
}
}
$rightleftmove=$princess[1]-$mario[1];
如果($rightleftmove<0){
对于(;$rightleftmove<0;$rightleftmove++){
$newposition=$mario[1]-1;
如果($newposition>=0){
$mario[1]=$newposition;
如果(修剪($移动)!=''){
$moves.=“\n”;
}
$moves.=“左”;
}
}
}否则{
对于(;$rightleftmove>0;$rightleftmove--){
$mario[1]=$mario[1]+1;
如果(修剪($移动)!=''){
$moves.=“\n”;
}
$moves.=“右”;
}
}
}
如果(isfound($mario,$princess)){
回应美元走势;
返回;
gridsize  = int(input('Enter number of rows: '))
grid      = [ input('Enter row: ') for r in range(gridsize) ]
move_dist = (gridsize-1)//2
if   grid[ 0][ 0] == 'p': print('\n'.join([   'UP\nLEFT'] * move_dist))
elif grid[ 0][-1] == 'p': print('\n'.join([  'UP\nRIGHT'] * move_dist))
elif grid[-1][ 0] == 'p': print('\n'.join([ 'DOWN\nLEFT'] * move_dist))
elif grid[-1][-1] == 'p': print('\n'.join(['DOWN\nRIGHT'] * move_dist))