level 1
我把整个迷宫全部转换为了数字
我把终点设为了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
我把终点设为了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);
}
望高手指点一下小弟后面这个递归函数该如何写才能运行