标题:用递归解迷宫问题
只看楼主
z8869113
Rank: 2
等 级:论坛游民
帖 子:44
专家分:14
注 册:2010-12-14
结帖率:75%
已结贴  问题点数:20 回复次数:2 
用递归解迷宫问题
        是poj的3984题貌似,刚才不知道为什么上不去~
问题是给一个迷宫,0代表可以走,1代表墙。
求路径
(老师要求用递归解决)

我自己的代码如下~
可能错误很多,求高手解答~

#include<stdio.h>
bool next(int lose[5][5],int a,int b)
{
    while(a<5)                            //判定界限,防止出界(下同)
    {
        if(lose[a+1][b]==0)                //看看右边是不是0(下面类似)
        {
            next( lose[5][5] , a+1 , b);//递归
            printf(" (%d,%d) ",a,b);    //输出
            return true;
        }
        else
            return false;
    }
    while(a>1)                            //判定界限,防止出界
    {
        if(lose[a-1][b]==0)
        {
            next( lose[5][5] , a-1 , b);
            printf(" (%d,%d) ",a,b);
            return true;
        }
        else
            return false;
    }
    while(b<5)                            //判定界限,防止出界
    {
        if(lose[a][b+1]==0)
        {
            next( lose[5][5] , a , b+1);
            printf(" (%d,%d) ",a,b);
            return true;
        }
        else
            return false;
    }
    while(b>1)                            //判定界限,防止出界
    {
        if(lose[a][b-1]==0)
        {
            next( lose[5][5] , a , b-1);
            printf(" (%d,%d) ",a,b);
            return true;
        }
        else
            return false;
    }
    if(a==b==5)                            //结束标志
        return true;
    else
        return false;
   
   
}   

void main()
{
    int loss[5][5]={{0,1,1,1,1}{0,0,1,1,1}{1,0,0,0,1}{1,1,1,0,1}{1,1,1,0,0}};    //给一个55的迷宫

    next(loss[5][5],5,5);
        
}


[ 本帖最后由 z8869113 于 2011-9-20 22:54 编辑 ]
搜索更多相关主题的帖子: include return while 
2011-09-20 22:44
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
得分:20 
问题不少,简单改了一下。
程序代码:
#include<stdio.h>

 bool next(int (*lose)[5],int a,int b)

 {
     while(a+1<5)                            //判定界限,防止出界(下同)
     {
         if(lose[a+1][b]==0)                //看看右边是不是0(下面类似)
         {
             printf(" (%d,%d) ",a,b);    //输出
             lose[a][b]=1;
             next( lose , a+1 , b);//递归
           
             return true;
         }
         else
             break;
     }
     while(a>1)                            //判定界限,防止出界
     {
         if(lose[a-1][b]==0)
         {
             printf(" (%d,%d) ",a,b);    //输出
             lose[a][b]=1;
             next( lose , a-1 , b);
          
             return true;
         }
         else
             break;
     }
     while(b+1<5)                            //判定界限,防止出界
     {
         if(lose[a][b+1]==0)
         {
             printf(" (%d,%d) ",a,b);    //输出
             lose[a][b]=1;
             next( lose , a , b+1);
          
             return true;
         }
         else
             break;
     }
     while(b>1)                            //判定界限,防止出界
     {
         if(lose[a][b-1]==0)
         {
             printf(" (%d,%d) ",a,b);    //输出
             lose[a][b]=1;
             next( lose , a , b-1);
          
             return true;
         }
         else
             break;
     }
     if(a==b&&a==5)                            //结束标志
         return true;
     else
         return false;
   
  
}   

void main()

 {
     int loss[5][5]={{0,1,1,1,1},{0,0,1,1,1},{1,0,0,0,1},{1,1,1,0,1},{1,1,1,0,0}};    //给一个55的迷宫

    next(loss,0,0);
       

 }

 

 
2011-09-21 01:14
z8869113
Rank: 2
等 级:论坛游民
帖 子:44
专家分:14
注 册:2010-12-14
得分:0 
回复 2楼 czsbc
太谢谢了~我原来错了那么多。。。。

可是这样只能求解唯一路径,如果多条路径就出错。
怎么才能让它求解最短路径呢?

能给个思路我么?
2011-09-22 16:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350442-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.291459 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved