<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一切皆可抽象

    大而無形 庖丁解牛 厚積薄發 滌慮玄覽
       ::  ::  ::  ::  :: 管理

    【原創】關于一個矩陣算法

    Posted on 2005-09-05 14:24 鋒出磨礪 閱讀(1829) 評論(4)  編輯  收藏 所屬分類: java算法

    結果
    順時針

    01   02   03   04  

    10   11   12   05  

    09   08   07   06  

    逆時針

    04   03   02   01  

    05   12   11   10  

    06   07   08   09  

    代碼
    public class test {
      public test() {
      }
      private static int[][] data = null;

      private int datai = 1;    //數值
      private static int  h =0, i=0, j;
      private int row1 =0,col1 =0,row2=0,col2=0;
     
      static int x=3,y=4;    // x=? y=?

      public static void main(String[] args)
      {
         j = y-1;
         data = new int[x][y];  //data init  定義了x行 y列的矩陣 用于存放數據
         test t = new test();
         t.input(1);           //開始數據塞入 1表示 從左到右
         //數據輸出
         System.out.println("順時針");
         for (int ki=0;ki     {
           for (int kj=0;kj       {

             System.out.print(addZero(String.valueOf(x*y).length(),data[ki][kj])+"   ");
           }
           System.out.println("");
         }


         System.out.println("逆時針");
         int[][] kk = niuniu(data,x,y); //矩陣倒置
         for (int ki=0;ki     {
           for (int kj=0;kj       {

             System.out.print(addZero(String.valueOf(x*y).length(),kk[ki][kj])+"   ");
           }
           System.out.println("");
         }


      }

      private  void input(int typej)
      {
         if (datai > x*y)
         {
           //System.out.println("exit");如果數據塞入到頭 退出遞歸
         }
         else
         {


          //從左到右塞入數據
          if (typej == 1) {
             for (int k = i; k <= j; k++) {
               data[h][k] = datai++;
             }

             row1++;  //上面走了一行
             h = y - 1 - col1;  //下一步從上到下表示的列值
             i = row1;          //行起始
             j = x - 1 - col1;  //行終止
             input(2);         //從上到下遍歷數據
           }

           //從上到下塞入數據
           if ( typej == 2) {
             for (int k = i; k <= j; k++) {
                data[k][h] = datai++;
              }

             col1++;  //左邊走了一列
             h = x - 1 - row2;  //下一步從右到左表示的行值
             i = y - 1 - col1;  //列起始
             j = col2;          //列終止
             input(3);          //從右到左遍歷數據
           }

           //從右到左塞入數據
           if ( typej == 3) {
             for (int k = i; k >= j; k--) {
               data[h][k] = datai++;
             }

             row2++;  //下面走了一行
             h = col2;  //下一步從下到上表示的列值
             i = x - 1 - row2;   //行起始
             j = row1;           //行終止
             input(4);           //從下到上遍歷數據
           }

           //從下到上塞入數據
           if (typej == 4) {
             for (int k = i; k >= j; k--) {
               data[k][h] = datai++;
             }

             col2++;  //左面走了一列
             h = row1;  //下一步從左到右的行值
             i = col2;   //列起始
             j = y - 1 - col1;  //列終止
             input(1);
           }
         }
      }

        //補位
        public static String addZero(int weishu, int num) {
        /* int num=new Integer(num).intValue();*/
        int len = Integer.toString(num).length();
        if (len >= weishu) {
          return Integer.toString(num);
        }
        int i = 0;
        int j = weishu - len;
        String BH = "";
        while (i < j) {
          BH = "0" + BH;
          i = i + 1;
        }
        BH = BH + Integer.toString(num);
        return BH;
      }

      //列copy,第1列和最后一列互換 依次類推
      public static int[][] niuniu(int[][] temp,int xi,int yi)
      {
        int[][] rs = new int[xi][yi];
        int foxi = yi/2;
        for (int i=0;i    {
          for (int j=0;j      {
            rs[j][yi-1-i] = temp[j][i];
          }
        }
        int col = foxi-1;
        int k = 0;
        if (yi%2 == 0)
        {
          k = foxi;
        }
        else
        {
          k = foxi +1;
        }
        for (int i=k;i<=yi-1;i++)
        {
          for (int j=0;j      {
            rs[j][col] = temp[j][i];
          }
          col--;
        }

        if (yi%2 == 0)
        {
        }
        else
        {
         for (int j=0;j     {
          rs[j][foxi] = temp[j][foxi];
         }

        }

        return rs;
      }


    }


    評論

    # re: 關于一個矩陣算法  回復  更多評論   

    2005-09-05 19:46 by Pudgy's World
    這個就是螺旋虧陳矩陣吧。

    # re: 關于一個矩陣算法  回復  更多評論   

    2005-09-05 19:49 by 鋒出磨礪
    對 算法比較老土 。如果誰有更好的 請貼出共同參考學習。

    # re: 關于一個矩陣算法  回復  更多評論   

    2005-09-06 11:36 by ^ Mustang ^
    我們當初C語言考試的大題里有一道這樣的

    # re: 【原創】關于一個矩陣算法  回復  更多評論   

    2006-05-29 20:19 by 月摻
    class Test5{
    public static void main(String[] args){
    final int count = 10;
    int k = 1;
    int[][] a = new int[count][count];
    for (int n = 0; n<(count+1)/2; n++){ //從外往里需要(count+1)/2圈
    for (int i = n; i<count - n; i++){ //上橫行
    a[i][n] = k++;
    }
    for (int i = n + 1; i<count - n; i++){ //右豎行
    a[count-n-1][i] = k++;
    }
    for (int i = count-n-2; i>=n; i--){ //下橫行
    a[i][count-n-1] = k++;
    }
    for (int i = count-n-2; i>n; i--){ //左豎行
    a[n][i] = k++;
    }
    }
    for (int i = 0; i<count; i++){
    for (int j = 0; j<count; j++)
    System.out.print (a[i][j] + " ");
    System.out.println ();
    }
    }
    }
    我們老師寫的。
    主站蜘蛛池模板: 男女啪啪免费体验区| 久久精品国产亚洲av品善| 夜夜嘿视频免费看| 亚洲精品高清久久| 久久亚洲精品专区蓝色区| 污污视频免费观看网站| 夜色阁亚洲一区二区三区| 免费看美女午夜大片| 亚洲AV网站在线观看| 成在人线av无码免费高潮水| 中文字幕亚洲激情| 无码国产精品一区二区免费3p | 欧美a级成人网站免费| 国产L精品国产亚洲区久久| 91在线亚洲综合在线| 日韩特黄特色大片免费视频| 亚洲第一网站免费视频| 毛片免费在线播放| 亚洲Av高清一区二区三区| 一区二区三区无码视频免费福利| 亚洲av中文无码| 久久久久久久久久久免费精品| 国产亚洲美女精品久久久2020| 免费看男人j放进女人j免费看| 亚洲人成影院在线| 成人免费视频观看无遮挡| 一区二区三区在线免费观看视频| 亚洲欧洲日产国码久在线观看| 久久久久国色AV免费观看性色| 美国毛片亚洲社区在线观看| 亚洲国产精品成人久久| 97在线观看永久免费视频| 色费女人18女人毛片免费视频| 日本不卡免费新一二三区| 中文字幕免费人成乱码中国| 亚洲av成人无码久久精品| 久久99热精品免费观看动漫| 亚洲欧美日韩久久精品| 亚洲人成人无码网www电影首页| av永久免费网站在线观看 | 亚洲精品国产摄像头|