蛇形填数 递归

来源:互联网 发布:2017网络最新最火的词 编辑:程序博客网 时间:2024/05/16 17:24

蛇形填数

描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:

输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3

样例输出

1   8  7

2  9  6

3  4  5

#include<iostream>using namespace std;#define N 100int P[N][N];void Fill(int number,int begin,int size){if(size==0)return ;if(size==1){P[begin][begin]=number;return;}int i=0;int h=begin,v=begin;P[h][v]=number;number++;for(i=0;i<size-1;i++){h++;P[h][v]=number;number++;}for(i=0;i<size-1;i++){v++;P[h][v]=number;number++;}for(i=0;i<size-1;i++){h--;P[h][v]=number;number++;}for(i=0;i<size-2;i++){v--;P[h][v]=number;number++;}Fill(number,v,size-2);}int main(){int h,v,n;scanf("%d",&n);Fill(1,0,n);for(h=0;h<n;h++){for(v=0;v<n;v++){printf("%d ",P[h][v]);}printf("\n");}return 0;}
思想:

1、从上到下

for(i=0;i<size-1;i++)
{
h++;
P[h][v]=number;
number++;
}

2、从左到右

for(i=0;i<size-1;i++)
{
v++;
P[h][v]=number;
number++;
}

3、自下而上

for(i=0;i<size-1;i++)
{
h--;
P[h][v]=number;
number++;
}

4、自右向左

for(i=0;i<size-2;i++)
{
v--;
P[h][v]=number;
number++;
}

临界条件:size==0和size==1
 

0 0
原创粉丝点击