该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//OPP果然无人权。。。我都不好意思那粗来了
#include
using namespace std;
#include
const int N=10; //定义数阵阶数
const int est=1; //定义“蛇”爬行方向
const int south=2;
const int west=3;
const int north=4;
int walk(int direction=est); //声明“爬行”函数,缺省方向为向东
static int snake[N][N]; //数阵用2维数组 snake 保存
static int num=1; //“蛇头”数字用 num 保存
int main() //主函数
{
walk(); //调用爬行函数
int i,j;
for(i=0;i
{
for(j=0;j
cout<
cout<
}
system("pause");
return 0;
}
int walk(int direction) //定义“爬行”函数,蛇先向东行
{
static int i=0,j=0; //数组下标i,j
if(num==N*N+1) //若“蛇头”数字溢出,则停止,返回主函数
{
num--;
return 0;
}
switch(direction) //选择方向
{
case est:
snake[i][j]=num++; //填数
if(snake[i][j+1]==0&&j
{
j++; //“蛇头”纵坐标自增1
return walk(est); //递归
}
else //若东面已经没有可填方格,则右转,转向南
{
i++;
return walk(south);
}
break;
case south: //因为整个过程只有右转,所以顺序为:东、南、西、北、东
snake[i][j]=num++;
if(i
{
i++;
return walk(south);
}
else
{
j--;
return walk(west);
}
break;
case west:
snake[i][j]=num++;
if(j>0&&snake[i][j-1]==0)
{
j--;
return walk(west);
}
else
{
i--;
return walk(north);
}
break;
case north:
snake[i][j]=num++;
if(i>0&&snake[i-1][j]==0)
{
i--;
return walk(north);
}
else
{
j++;
return walk(est);
}
break;
}
}