繁体   English   中英

解决2d阵列中的迷宫

[英]Solving a maze in 2d array

我已经提到了许多文章和问题,这些文章和问题有效地解决了如何解决迷宫问题,但在这里我想确认我的代码中出了什么问题。 考虑迷宫:

2 1 0 0 3
0 1 0 1 1
0 1 0 0 1
0 1 1 0 0
0 0 0 0 0

其中1代表墙壁,0代表路径。(来源为2,目的地为3)。 我必须输出是否有路径。

int y=0;
        while(y==0)
        {
            robo1(n,m,maze);//this function adds 2 to any '0'/'3' in (i,j+1),(i+1,j),(i-1,j),(i,j-1) (if exists),where (i,j) is 2
            robo2(n,m,k2,maze);//this function adds 3 to any '0'/'2' in (i,j+1),(i+1,j),(i-1,j),(i,j-1) (if exists), where (i,j) is 3
            if(find5(n,m,maze)==1)//this function returns 1 if there is '5' in the maze
                y++;
            if(find0(n,m,maze)==0)//this function returns 0 if there are no '0' in the maze
                break;
        }
        if(find0(n,m,maze)==0 && y==0)
            printf("-1\n");//no path
        else
            printf("1\n");//there is a path

我的想法是,如果在迷宫中找到任意数量的循环五后,则意味着存在路径。 但是在代码中实现此功能时,我会得到错误的答案,有时会出现运行时错误。 上述逻辑有什么缺陷吗?

一般的想法几乎应该有效,但当然一切都在细节中。

但是,即使正确实施,您的方法也无法正常工作的一种情况:

  2 1 0 0 0
  1 1 0 1 1 
  0 0 0 1 3

即如果2和3都被墙“关闭”,但房间里有0。 你的循环将永远不会结束,因为尽管两个robo函数都没有,但两者都不会改变任何东西。

一个简单的解决方案是从robos返回0/1,如果它们实际上至少改变了矩阵中的一个值并且在没有发生这种情况时退出。

请注意,这不是解决迷宫的一种非常有效的方法(您的代码将不断检查相同的单元格多次)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM