gpt4 book ai didi

Java迷宫最短路径误解

转载 作者:行者123 更新时间:2023-11-30 03:07:08 25 4
gpt4 key购买 nike

这里是代码,使用递归,我试图用最短路径解决迷宫,但它用更长的方法解决,我真的不明白为什么。这是递归代码:

public boolean findPath(int row, int col) {
board[row][col].visit();

if ((col == 7) && (row == 7)) {
board[row][col].selectCell();
return true;
}


if ((row > 0) && !board[row - 1][col].marked() &&
!board[row - 1][col].blocked() && !board[row - 1][col].visited()) {
block(row, col);

if (findPath(row - 1, col)) {
board[row][col].selectCell();
return true;
}

unblock(row, col);
}

if ((row < 7) && !board[row + 1][col].marked() &&
!board[row + 1][col].blocked() && !board[row + 1][col].visited()) {
block(row, col);

if (findPath(row + 1, col)) {
board[row][col].selectCell();
return true;
}

unblock(row, col);
}

if ((col > 0) && !board[row][col - 1].marked() &&
!board[row][col - 1].blocked() && !board[row][col - 1].visited()) {
block(row,col);
if (findPath(row, col - 1)) {
board[row][col].selectCell();
return true;
}

unblock(row,col);
}

if ((col < 7) && !board[row][col + 1].marked() &&
!board[row][col + 1].blocked() && !board[row][col + 1].visited()) {
block(row,col);
if (findPath(row, col + 1)) {
board[row][col].selectCell();
return true;
}

unblock(row,col);
}

return false;

}

它是 8x8 板, block 功能的工作原理如下:

public void block(int row, int col) {
if (row > 0) {
board[row - 1][col].block();
}

if (row < 7) {
board[row + 1][col].block();
}

if (col > 0) {
board[row][col - 1].block();
}

if (col < 7) {
board[row][col + 1].block();
}

}

当我尝试解决它时,它给了我这样的东西: enter image description here

而不是: enter image description here

任何帮助将不胜感激!

最佳答案

试试这个,它应该可以工作并直接完成:

public boolean findPath(int row, int col) {
board[row][col].visit();

if ((col == 7) && (row == 7)) {
board[row][col].selectCell();
return true;
}

if ((row < 7) && !board[row + 1][col].marked() &&
!board[row + 1][col].blocked() && !board[row + 1][col].visited()) {
block(row, col);

if (findPath(row + 1, col)) {
board[row][col].selectCell();
return true;
}

unblock(row, col);
}

if ((col > 0) && !board[row][col - 1].marked() &&
!board[row][col - 1].blocked() && !board[row][col - 1].visited()) {
block(row,col);

if (findPath(row, col - 1)) {
board[row][col].selectCell();
return true;
}

unblock(row,col);
}

if ((col < 7) && !board[row][col + 1].marked() &&
!board[row][col + 1].blocked() && !board[row][col + 1].visited()) {
block(row,col);

if (findPath(row, col + 1)) {
board[row][col].selectCell();
return true;
}

unblock(row,col);
}
if ((row > 0) && !board[row - 1][col].marked() &&
!board[row - 1][col].blocked() && !board[row - 1][col].visited()) {
block(row, col);

if (findPath(row - 1, col)) {
board[row][col].selectCell();
return true;
}

unblock(row, col);
}

return false;
}

您需要更改订单。

关于Java迷宫最短路径误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34479670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com