首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:用于使用Java的递归迷宫代码中的错误

Java:用于使用Java的递归迷宫代码中的错误
EN

Stack Overflow用户
提问于 2018-09-20 06:50:27
回答 1查看 86关注 0票数 -2

下面的代码是用于通过递归的迷宫,并被认为是解决迷宫。它从S读取三个不同的txt文件,S是开始,G是目标,X是障碍,O是自由空间

代码语言:javascript
复制
GOOOOXO //maze1
XXOXOOX
OXOOOXX
XXXOOXO
XXXXOXX
SOOOOOX
XXXXXXX

代码语言:javascript
复制
XOOOOXO //maze2
XXOXOOG
OXOOOXX
XXXOOOX
XXXXOXX
SOOOOOX
XXXXXXX

代码语言:javascript
复制
XOOOOXO //maze3
XXOXOXG
OXOOOXX
XXXOOOX
XXXXOXX
SOOOOOX
XXXXXXX

这些是迷宫。maze1和maze2有一个解决方案,但每次我运行它时,它都返回"unsolvable“。我不确定错误在哪里。下面是完整的代码:

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
public class Maze2
{
 private static char[][] maze;
 private static int startrow, startcol, finishrow, finishcol;
 private static ArrayList<String> mazeBuffer;
 public static void initializeMaze(String fileName)
 {
  startrow = startcol = finishrow = finishcol = -1;
  mazeBuffer = new ArrayList<String>();
  int numcols = 0;
  try
  {
   Scanner file = new Scanner(new File(fileName));
   while(file.hasNext())
   {    
    String nextLine = file.nextLine();
    mazeBuffer.add(nextLine);
    if (nextLine.length() > numcols)
     numcols = nextLine.length();
   }
  }
  catch(Exception e)
  {
   System.out.println(fileName + " has an issue");
  }
  int numrows = mazeBuffer.size();
  maze = new char[numrows][numcols];
  for (int r = 0; r < numrows; r ++)
  {
   String row = mazeBuffer.get(r);
   for (int c = 0; c < numcols; c++)
   {
    if(row.length() >= c)
     maze[r][c]=row.charAt(c);
    else
     maze[r][c]='*';
    if (maze[r][c] == 'S')
    {
     startrow = r;
     startcol = c;
    }
    if (maze[r][c] == 'G')
    {
     finishrow = r;
     finishcol = c;
    }
   }
  }
  System.out.println("Maze loaded");
 }
 public static void printMaze()
 {
  for (char[] row: maze)
  {
   for (char c: row)
    System.out.print(c);
   System.out.println();
  }
  System.out.println();
 }
 public static void main (String[] args)
 {
  initializeMaze("maze3.txt");
  printMaze();
  if (solveMaze(startrow, startcol))
   printMaze();
  else
   System.out.println("Unsolvable.");
 } 
public static boolean solveMaze(int r, int c)
{
  if(r < 0 || c < 0 || r >= maze.length || c >= maze[0].length)
    return false;  
  if(maze[r][c]=='G')
    return true;
  if (maze[r][c] != '0'|| maze[r][c] != 'S')
    return false; 
 maze[r][c]='A';
 if(solveMaze(r-1,c))
 {
   maze[r][c]= '#';
   return true;
 }
  if(solveMaze(r+1,c))
 {
   maze[r][c]='#';
   return true;
 }
   if(solveMaze(r,c-1))
 {
   maze[r][c]='#';
   return true;
 }
   if(solveMaze(r,c+1))
 {
   maze[r][c]='#';
   return true;
 }
  else{
  return false;
    }
   }
}

如果一切都是正确的,迷宫1和迷宫2应该是可解的,但到目前为止,由于某种原因,它们不是可解的。请帮帮忙,这是一个即将到期的项目,我搞不清楚。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-20 07:20:42

如果您在有效的路径上,问题就出在条件上。第一个错误是,您正在检查数字0而不是大写字母O。第二个错误是两个条件的组合。如果你从“S”开始,你显然不是在“O”。因此,您的条件告诉您,您不在有效的路径上。检查应为: if(!(mazer == 'O'|| mazer == 'S'))

如果你解决了这个问题,一切都会好起来的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52415190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档