新手请教一个关于迷宫里面的递归问题
c语言吧
全部回复
仅看楼主
level 1
DemonicVergil 楼主
我把整个迷宫全部转换为了数字
我把终点设为了0,所有可以走的路设为了100,墙为-1
然后我写了一个命名为min的函数,输入坐标,检查上下左右4个点的数字,其中不等于-1,且数值大于坐标点的数值的,让这个点的数值等于坐标点数值+1:
void min(int x, int y, int N, int dmaze[100][100])
{
        if((x-1)>0)          
        {
                if((dmaze[x-1][y]!=-1)&&(dmaze[x][y] < dmaze[x-1][y]))
                
                        dmaze[x-1][y]=dmaze[x][y]+1;
                
        }
        if((x+1)<N)    
        {
                if((dmaze[x+1][y]!=-1)&&(dmaze[x][y] < dmaze[x+1][y]))
                
                        dmaze[x+1][y]=dmaze[x][y]+1;
                
        }
        if((y-1)>0)     
        {
                if((dmaze[x][y-1]!=-1)&&(dmaze[x][y] < dmaze[x][y-1]))
                
                        dmaze[x][y-1]=dmaze[x][y]+1;
                
        }
        if((y+1)<N)     
        {
                if((dmaze[x][y+1]!=-1)&&(dmaze[x][y] < dmaze[x][y+1]))
                
                         dmaze[x][y+1]=dmaze[x][y]+1;
}     
}
但是这个函数只能运行一次,只能对坐标点上下左右的点进行检查然后+1
需要写一个递归函数让min函数对一个坐标点进行处理过后,再以坐标点上下左右的点为基础坐标点再进行一次处理,如此循环
我自己写了一个...但是完全不能工作
void depth(int x, int y, int N, int dmaze[100][100])
{
min(x,y,N,dmaze);
if(dmaze[x-1][y]!=-1 && x-1>0)
depth(--x,y,N,dmaze);
if(dmaze[x+1][y]!=-1 && x+1<N)
depth(++x,y,N,dmaze);
    if(dmaze[x][y-1]!=-1 && y-1>0)
depth(x,--y,N,dmaze);
    if(dmaze[x][y+1]!=-1 && y+1<N)
depth(x,++y,N,dmaze);
}
望高手指点一下小弟后面这个递归函数该如何写才能运行
2009年02月06日 23点02分 1
1