• 【算法笔记】B1050 螺旋矩阵


    1050 螺旋矩阵 (25 分)
     

    本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为 m 行 n 列,满足条件:m×n 等于 N;mn;且 mn 取所有可能值中的最小值。

    输入格式:

    输入在第 1 行中给出一个正整数 N,第 2 行给出 N 个待填充的正整数。所有数字不超过 1,相邻数字以空格分隔。

    输出格式:

    输出螺旋矩阵。每行 n 个数字,共 m 行。相邻数字以 1 个空格分隔,行末不得有多余空格。

    输入样例:

    12
    37 76 20 98 76 42 53 95 60 81 58 93
    

    输出样例:

    98 95 93
    42 37 81
    53 20 76
    58 60 76

    【碰壁法】判断下一个数,如果不为0就拐弯。如图:

       

      最后一个测试点总是超时,把 col = (int)sqrt(n) 改成  col = sqrt(n) 后 AC。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 10010;
     4 int a[maxn][maxn] = {0};
     5 bool cmp(int a, int b){
     6     return a > b;
     7 }
     8 int main(){
     9     int n, ori[maxn];
    10     cin>>n;
    11     int col = sqrt(n), row;
    12     while(n % col){
    13         col--;
    14     }
    15     row = n / col;
    16     for(int i = 0; i < n; i++){
    17         scanf("%d",&ori[i]);
    18     }
    19     sort(ori, ori + n, cmp);
    20     int x = 1, y = 1, cnt = 0;
    21     a[y][x] = ori[cnt];
    22     while(cnt + 1 < n){
    23         while(y + 1 <= col && ! a[x][y + 1])
    24             a[x][++y] = ori[++cnt];
    25         while(x + 1 <= row && !a[x + 1][y])
    26             a[++x][y] = ori[++cnt];
    27         while(y - 1 > 0 && !a[x][y - 1])
    28             a[x][--y] = ori[++cnt];
    29         while(x - 1 > 0 && !a[x - 1][y])
    30             a[--x][y] = ori[++cnt];  
    31     }
    32     for(int i=1;i<=row;i++){
    33         printf("%d",a[i][1]);
    34         for(int j=2;j<=col;j++){
    35             printf(" %d",a[i][j]);
    36         } 
    37         printf("
    ");
    38     }
    39     return 0;
    40 }
  • 相关阅读:
    XAML
    诺基亚Lumia 800越狱教程
    Windows Phone常用控件
    Windows Phone数据存储
    Silverlight自定义鼠标
    [silverlight] silverlight3新增功能1:三维效果(透视转换)
    [silverlight] silverlight3新增功能2:WriteableBitmap
    另一种方法实现silverlight图片局部放大效果
    [Silverlight]简单实现DataGrid使用CheckBox选择行
    好用的模糊搜索下拉提示
  • 原文地址:https://www.cnblogs.com/chunlinn/p/10631741.html
Copyright © 2020-2023  润新知