好玩的递归:(
递归其实一点也不好玩:(
这个递归函数会引起“无效命令”错误,但我实在看不出哪里出错了,请你帮我检查一下好吗?
函数功能:给出一个参数结点find_node,搜索可以到达全局结点end_node的路径,将该路径存储在Beads_road[50][2]二维数组中.(一维就够了,但在程序其他地方需要用到第二维数据)
数据结构:共有9*9个方块。
Beads_checked[9][9],值为1时表示由此方块递归,无法到达全局结点end_node.为0时表示由此方块递归,可以到达全局结点end_node.开始时,Beads_checked[9][9]={0}
Beads_road[50][2],存放搜索到的路径值,例如第2行8列的方块,将其转变为一个整数:num=2*9+8%9,最后由a=num/9,b=num%9,b=b?b:9;还原行列值。
int Beads_get_road(Beads_node find_node)
{
int i,j,flag=0,find_num=0;
Beads_node node;
int x,y;
int aa[]={-1,1,0,0};
int bb[]={0,0,-1,1};
for(i=0;i<4;i++)
{
node.a=find_node.a+aa[i];
node.b=find_node.b+bb[i];
if (!(node.a>0&&node.a<10&&node.b>0&&node.b<10))
continue;
if( (!Beads_Beads[node.a][node.b]) && (!Beads_checked[node.a][node.b]) )
{
if(node.a==end_node.a && node.b==end_node.b)
{
j=0;
while(Beads_road[j][0]!=0)
j++;
Beads_road[j][0]=find_node.a*9+find_node.b%9;
return 1;
}
else if( Beads_get_road(node) )
{
find_num++;
return 1;
}
}
}
if(find_num>0)
{
Beads_checked[find_node.a][find_node.b]=0;
j=0;
while(Beads_road[j][0]!=0)
j++;
Beads_road[j][0]=find_node.a*9+find_node.b%9;
return 1;
}
else
{
Beads_checked[find_node.a][find_node.b]=1;
return 0;
}
}