递归法 实现 想看明白 请先去吧把我另一个“撞墙法”的非递归程序看明白
百度空间hi.baidu.com/yuqinwang/item/cd25df20856e732f72863e05#include <stdio.h>
void fun(int a[][5], int w[],int x, int y, int k, int d)
{
a[x][y] = k;
if(k==1)
return;
if(d==1)
{
if(y>w[2])
fun(a, w, x, y-1, k-1, 1);
else
{
w[2]++;
fun(a, w, x+1, y, k-1, 2);
}
}
if(d==2)
{
if(x<w[1])
fun(a, w, x+1, y, k-1, 2);
else
{
w[1]--;
fun(a, w, x, y+1, k-1, 3);
}
}
if(d==3)
{
if(y<w[3])
fun(a, w, x, y+1, k-1, 3);
else
{
w[3]--;
fun(a, w, x-1, y, k-1, 4);
}
}
if(d==4)
{
if(x>w[0])
fun(a, w, x-1, y, k-1, 4);
else
{
w[0]++;
fun(a, w, x, y-1, k-1, 1);
}
}
}
int main()
{
int a[5][5] = {{0},{0},{0},{0},{0}};
int wall[4] = {1, 4, 0, 4};
int i;
int j;
fun(a, wall, 0, 4, 25, 1);
printf("the array is:\n\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%6d", a[i][j]);
}
printf("\n");
}
return 0;
}
本回答被网友采纳