S型矩阵的输出

来源:互联网 发布:网络专员岗位职责 编辑:程序博客网 时间:2024/05/24 07:28

输出如下如示的数组:

其代码如下:

 

#include<iostream>
#define N 8
using namespace std;

int main()
{
    enum{right,down,left,up};//表示四个方向
    ///起始点:
    int i=0;
    int j=0;
    ///临时点
    int ti=i;
    int tj=j;
    ///当前结点等于前一结点时为0,否则为1
    bool bl=0;
    int dr=right;//开始时向右前进
    int a[N][N]={0};
    ///m为结点总数,当为一个方形为k+1的平方
    int m=0;
    cout<<i<<j<<endl;
    ///输出为长为k的文形
    for(int k=1;k<N;k++)
    {
        int s=(k+1)*(k+1);//最小的方形长为2,所以为k+1
        while(j<k&&m<s)//方形的横边j长小于文形长k
        {///方向为右
            if(dr==left)break;//当方向为右时不能向左倒退
            if(i==ti&&j==tj&&bl==0)//当前的结点没有输出时输出
            {
                 cout<<i<<j<<"..."<<endl;
                 a[i][j]=m+1;
                 m++;//总结点加1;
                 bl=1;//已输出
            }
            if(m==s)break;//方形完成输出退出
            j++;//向右进一步
            bl=0;//输出标志为0
            ///给临时结点赋值
            ti=i;
            tj=j;
            dr=right;//再向右走

        }
        while(i<k&&m<s)
        {
            if(dr==up)break;
            if(i==ti&&j==tj&&bl==0)
            {
                 cout<<i<<j<<"***"<<endl;
                 a[i][j]=m+1;
                 m++;
                 bl=1;
            }
            if(m==s)break;
            i++;
            bl=0;
            ti=i;
            tj=j;
            dr=down;
        }
        while(j>0&&m<s)
        {
            if(dr==right)break;
            if(i==ti&&j==tj&&bl==0)
            {
                 cout<<i<<j<<"+++"<<endl;
                 a[i][j]=m+1;
                 m++;
                 bl=1;
            }
            if(m==s)break;
            j--;
            bl=0;
            ti=i;
            tj=j;
            dr=left;
        }
        while(i>0&&m<s)
        {
            if(dr==down)break;
            if(i==ti&&j==tj&&bl==0)
            {
                 cout<<i<<j<<"###"<<endl;
                 a[i][j]=m+1;
                 m++;
                 bl=1;
            }
            if(m==s)
                break;
            i--;
            bl=0;
            ti=i;
            tj=j;
            dr=up;
        }
        ///每次边长为k时,要输出方形,若不为方形,要继续输出
        if(m!=s) k--;
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
            cout<<a[i][j]<<"/t";
        }
        cout<<endl;
    }

    return 0;

}

其算法如下

原创粉丝点击