旋转排列

1   2   3   4
12  13  14  5
11  16  15  6
10  9   8   7

以上图形如何实现,算法?

===========================================================================

#include<iostream>
#include<stdlib.h>
using namespace std;
int mask=4,m=1,i,j;
void check(int mask)
{
    switch (mask)
    {
        case 4:j++;break;      //表示行,向右
        case 3:i++;break;      //列向下
        case 2:j--;break;      //行,向左
        case 1:i--;break;      //列向上
    }
}
int main(int argc,char *argv[])
{
    int n;
    cout<<"请输入维数"<<endl;
    cin>>n;
/*分配空间,并赋初值为0 */
    int **aa=(int **)calloc(sizeof(int *),n);
    for(int k=0;k<n;k++)aa[k]=(int *)calloc(sizeof(int),n);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            aa[i][j]=0;
    i=j=0;
/*循环赋值 */
    while(m<=n*n)
    {
        aa[i][j]=m++;
        if(mask==4&&(j+1==n||aa[i][j+1]))mask--;
        if(mask==3&&(i+1==n||aa[i+1][j]))mask--;
        if(mask==2&&(j-1<0||aa[i][j-1]))mask--;
        if(mask==1&&aa[i-1][j])mask--;
        if(!mask)mask=4;
        check(mask);//此函数对i及j修改.
    }
/*显示 */
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)cout<<aa[i][j]<<'/t';
        cout<<endl;
    }   
/*释放空间*/    
    for(i=0;i<n;i++)free(aa[i]);
    system("PAUSE");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值