0
点赞
收藏
分享

微信扫一扫

PAT--1105 Spiral Matrix

seuleyang 2022-05-02 阅读 25
c++算法

PAT–1105 Spiral Matrix

  • 题目描述
  • 代码
//
// Created by 马然 on 2022/5/1.
//
#include<iostream>
#include<math.h>
#include<algorithm>
#include<vector>
using namespace std;
int a[110][110] = {0};
bool cmp(int a, int b)
{
    return a >= b;
}
int main(){
    int N;
    vector<int> vec;
    cin>>N;
    for(int i = 0 ; i < N ; i++){
        int t;
        cin>>t;
        vec.push_back(t);
    }
    //排序
    sort(vec.begin(), vec.end(),cmp);
    //寻找合适的m,n
    int n = sqrt(N);
    int m ;
    for(n ; n > 0 ; n--){
        if(N % n == 0){
            m = N / n;
            break;
        }
    }
    //右左上下边界
    int rl = n - 1 , ll = 0 , ul = 1 , dl = m - 1;
    int col = 0 , row = 0;//当前坐标
    int r = 1 , d = 0 , l = 0 , u = 0;//方向
    int index = 0;//容器索引
    while(index < vec.size()){
        int temp = vec[index];
        if(r == 1){//向右
            if(col <= rl ){//小于右边届一直向右
                a[row][col] = temp;
                index++;
                col++;
            }
            else{//大于右边界
                r = 0;
                d = 1;//向下
                row++;//向下一行
                col--;//col减回来
                rl--;//右边界减1
            }
        }
        else if(d == 1){
            if(row <= dl){
                a[row][col] = temp;
                index++;
                row++;
            }
            else{
                d = 0;
                l = 1;
                col--;
                row--;
                dl--;
            }
        }
        else if(l == 1){
            if(col >= ll){
                a[row][col] = temp;
                index++;
                col--;
            }
            else{
                l = 0 ;
                u = 1;
                row--;
                col++;
                ll++;
            }
        }
        else if(u == 1){
            if(row >= ul){
                a[row][col] = temp;
                index++;
                row--;
            }
            else{
                u = 0;
                r = 1;
                row++;
                col++;
                ul++;
            }
        }
    }
    for(int i = 0 ; i < m ; i++){
        cout<<a[i][0];
        for(int j = 1 ; j < n ; j++){
            cout<<" "<<a[i][j];
        }
        cout<<endl;
    }
}

举报

相关推荐

0 条评论