zoukankan      html  css  js  c++  java
  • 十四:回形取数

    题目:回形取数

    回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
    输入格式
      输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
    输出格式
      输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
    样例输入
    3 3
    1 2 3
    4 5 6
    7 8 9
    样例输出
    1 4 7 8 9 6 3 2 5
    样例输入
    3 2
    1 2
    3 4
    5 6
    样例输出
    1 3 5 6 4 2

     1 #include<stdio.h>
     2 int main(){
     3     int n,m,k=1;
     4     int i,j;
     5     int b[300][300];
     6     int c[500];
     7     scanf("%d%d",&n,&m);
     8 for(i=0;i<n;i++)
     9     for(j=0;j<m;j++){
    10         scanf("%d",&b[i][j]);
    11     }
    12     
    13     i=0,j=0;
    14     c[0]=b[0][0];
    15     b[0][0]=0;
    16     while(1){
    17         while(i+1<n&&b[i+1][j]){
    18             c[k++]=b[++i][j];
    19             b[i][j]=0;
    20         }
    21         if(k>=n*m) break;
    22         while(j+1<m&&b[i][j+1]){
    23             c[k++]=b[i][++j];
    24             b[i][j]=0;
    25         }
    26         if(k>=n*m) break;
    27             while(i-1>=0&&b[i-1][j]){
    28                 c[k++]=b[--i][j];
    29                 b[i][j]=0;
    30         }
    31         if(k>=n*m) break;
    32             while(j-1>=0&&b[i][j-1]){
    33                 c[k++]=b[i][--j] ;
    34                 b[i][j]=0;
    35         }
    36         if(k>=n*m) break;
    37     }
    38     for(i=0;i<k;i++){
    39             printf("%d ",c[i]);
    40         }
    41     return 0;
    42 }
  • 相关阅读:
    单链表的算法
    顺序表的算法
    程序员的内功——数据结构和算法系列
    查找一 线性表的查找

    排序算法系列
    排序三 直接插入排序
    排序八 基数排序
    Linux编程 9 (shell类型,shell父子关系,子shell用法)
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志
  • 原文地址:https://www.cnblogs.com/yuming226/p/8146429.html
Copyright © 2011-2022 走看看