顺时针打印矩阵

有趣的打印矩阵,依照此模板进行扩展

 

#include<iostream>
#include<stdio.h>
using namespace std;
#define N 1005

int dp[N][N];
int main()
{
    //四个方向移动
    int dx[]={-1,0,1,0},dy[] = {0,1,0,-1};
    int m,n;
    cin>>m>>n;
    //d=1是向右边移动
    int x=0,y=0,d=1;
    for(int i=1;i<=m*n;i++)
    {
        dp[x][y]=i;
        int a = x+dx[d];
        int b = y+dy[d];
        //超过界限,转换方向
        if(a<0||a>=m||b<0||b>=n||dp[a][b])
        {
            //四个方向,d最大为3所以%4
            d = (d+1)%4;
            a = x+dx[d];
            b = y+dy[d];
        }
        x =a;
        y =b;
    }
    for(int i=0;i<m;i++)
    {
        for(int j = 0;j<n;j++)
        {
            printf("%7d",dp[i][j]);

        }
        cout<<endl;
    }

}

之前一次笔试题遇到,顺时针把字母放入矩阵,从a开始超过z再变a,与此类似

 

posted @ 2021-01-13 23:05  海拉尔  阅读(64)  评论(0编辑  收藏  举报