国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

螺旋矩陣、旋轉矩陣、矩陣Z字打印

這篇具有很好參考價值的文章主要介紹了螺旋矩陣、旋轉矩陣、矩陣Z字打印。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

螺旋矩陣

螺旋矩陣、旋轉矩陣、矩陣Z字打印,c++,算法,數(shù)據(jù)結構

#include <iostream>
#include <vector>
void display(std::vector<std::vector<int>>&nums){
       for(int i = 0; i < nums.size(); ++i){
             for(int j = 0; j < nums[0].size(); ++j){
                   std::cout<<nums[i][j]<<' ';
             }
             std::cout<<std::endl;
       }
}
void Process(int x1, int y1, int x2, int y2, std::vector<std::vector<int>>&nums){
      if(x1 == x2){
            while (y1 <= y2)
            {
                  std::cout<<nums[x1][y1++]<<' ';
            }    
      } else if(y1 == y2){
            while (x1 <= x2)
            {
                  std::cout<<nums[x1++][y1]<<' ';
            }    
      }else{
            for(int i = y1; i <= y2; ++i){
                  std::cout<<nums[x1][i]<<' ';
            }
            for(int i = x1 + 1; i <= x2; ++i){
                  std::cout<<nums[i][y2]<<' ';
            }
            for(int i = y2 - 1; i >= y1; --i){
                  std::cout<<nums[x2][i]<<' ';
            }
            for(int i = x2 - 1; i > x1; --i){
                   std::cout<<nums[i][y1]<<' ';
            }
      }
}
int main(){
    std::vector<std::vector<int>>nums;
    int n = 6;
    int m = 6;
    nums.resize(n);
    int num = 1;
    for(int i = 0; i < n;  ++i){
        std::vector<int>tmp(m, 0);
        for(int j = 0; j < m; ++j){
             tmp[j] = num++;
        }
        nums[i] = tmp;
    }
    display(nums);
    // 矩陣類型的題目可以枚舉一些特殊的點來做左上角點和右下角點, 然后在往內部收縮
    int x1 = 0, y1 = 0, x2 = n-1, y2 = m-1;
    while (x1 <= x2)
    {
        Process(x1, y1, x2, y2, nums);
        ++x1;
        ++y1;
        --x2;
        --y2;
    }
    
    std::getchar();
 

}

旋轉矩陣

類似于這個螺旋矩陣我們也是在每次處理最外層的矩形,然后往內收縮。
對于一個矩形我們選取四個點依次進行交換即可

#include <iostream>
#include <vector>
void display(std::vector<std::vector<int>>&nums){
       for(int i = 0; i < nums.size(); ++i){
             for(int j = 0; j < nums[0].size(); ++j){
                   std::cout<<nums[i][j]<<' ';
             }
             std::cout<<std::endl;
       }
}
void Process(int x1, int y1, int x2, int y2, std::vector<std::vector<int>>&nums){
      if(x1 == x2){
            while (y1 <= y2)
            {
                  std::cout<<nums[x1][y1++]<<' ';
            }    
      } else if(y1 == y2){
            while (x1 <= x2)
            {
                  std::cout<<nums[x1++][y1]<<' ';
            }    
      }else{
            for(int i = y1; i <= y2; ++i){
                  std::cout<<nums[x1][i]<<' ';
            }
            for(int i = x1 + 1; i <= x2; ++i){
                  std::cout<<nums[i][y2]<<' ';
            }
            for(int i = y2 - 1; i >= y1; --i){
                  std::cout<<nums[x2][i]<<' ';
            }
            for(int i = x2 - 1; i > x1; --i){
                   std::cout<<nums[i][y1]<<' ';
            }
      }
}
int main(){
    std::vector<std::vector<int>>nums;
    int n = 4;
    int m = 4;
    nums.resize(n);
    int num = 1;
    for(int i = 0; i < n;  ++i){
        std::vector<int>tmp(m, 0);
        for(int j = 0; j < m; ++j){
             tmp[j] = num++;
        }
        nums[i] = tmp;
    }
    display(nums);
    // 枚舉矩陣的四個點把最外圈的給調整好再往內圈收縮
    int x1, y1, x2, y2, x3, y3, x4, y4;
    int count = 0;

    while(count < n -2){
          x1 = count, y1 = count;
          x2 = count, y2 = n - 1 - count;
          x3 = n - 1 - count, y3 = count;
          x4 = n - 1 - count, y4 = n - 1 - count;
          while(y1 < y2 && x2 < x4 && y4 > y3 && x3 > x1){
                std::swap(nums[x1][y1], nums[x2][y2]);
                std::swap(nums[x1][y1], nums[x4][y4]);
                std::swap(nums[x1][y1], nums[x3][y3]);
                ++y1;
                ++x2;
                --y4;
                --x3;
                
          }
          ++count;
    }
    display(nums);
   
    
    std::getchar();
 

}

矩陣Z字打印

也是和螺旋矩陣類似選取兩個點進行循環(huán)文章來源地址http://www.zghlxwxcb.cn/news/detail-694286.html

#include <iostream>
#include <vector>
void display(int x1, int y1, int x2, int y2, std::vector<std::string>&strs){
      if(x1 < x2){
           while ( x1 <= x2 )
           {
                std::cout<<strs[x1++][y1--]<<' ';
           }
           std::cout<<std::endl;      
      } else{
           while ( x1 >= x2  )
           {
                std::cout<<strs[x1--][y1++]<<' ';
           }
           std::cout<<std::endl;          
      }
}
int main(){
     std::vector<std::string>strs = {"abcd", "efgh", "jklh"};
     int n = strs.size();
     int m = strs[0].size();
     int x1 = 0, y1 = 0;
     int x2 = 0, y2 = 0;
     int num = 0;
     while(x1 < n){
          if(num % 2 == 0){
               display(x1, y1, x2, y2, strs);
          } else{
               display(x2, y2, x1, y1, strs);
          }
          if(y1 < m - 1){
              y1++;
          }else{
              x1++;
          }
          if(x2 < n - 1){
              x2++;
          }else{
              y2++;
          }
          num++;
     } 
     std::getchar();


}

矩陣打印的題目可以從選取若干個點然后處理一層之后再往內進行收縮的做法先進行考慮

到了這里,關于螺旋矩陣、旋轉矩陣、矩陣Z字打印的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數(shù)據(jù)結構第七周 :(稀疏矩陣快速轉置 + 簡單文本編輯器 + 三元組的矩陣加法 + 九宮格數(shù)獨游戲 + 數(shù)組主元素 + 螺旋數(shù)字矩陣 + 蛇形矩陣)

    【問題描述】 稀疏矩陣的存儲不宜用二維數(shù)組存儲每個元素,那樣的話會浪費很多的存儲空間。所以可以使用一個一維數(shù)組存儲其中的非零元素。這個一維數(shù)組的元素類型是一個三元組,由非零元素在該稀疏矩陣中的位置(行號和列號對)以及該元組的值構成。而矩陣轉置就

    2023年04月21日
    瀏覽(23)
  • 【數(shù)據(jù)結構】數(shù)組和字符串(八):稀疏矩陣的鏈接存儲:十字鏈表的創(chuàng)建、插入元素、遍歷打?。ò葱?、按列、打印矩陣)、銷毀

    【數(shù)據(jù)結構】數(shù)組和字符串(八):稀疏矩陣的鏈接存儲:十字鏈表的創(chuàng)建、插入元素、遍歷打?。ò葱小戳?、打印矩陣)、銷毀

    【數(shù)據(jù)結構】數(shù)組和字符串(一):矩陣的數(shù)組表示 ??矩陣是以按行優(yōu)先次序將所有矩陣元素存放在一個一維數(shù)組中。但是對于特殊矩陣,如對稱矩陣、三角矩陣、對角矩陣和稀疏矩陣等, 如果用這種方式存儲,會出現(xiàn)大量存儲空間存放重復信息或零元素的情況,這樣會造

    2024年02月06日
    瀏覽(25)
  • 【算法集訓】基礎數(shù)據(jù)結構:十、矩陣

    矩陣其實就是二維數(shù)組,這些題目在9日集訓中已經(jīng)做過,這里做的方法大致相同。

    2024年02月04日
    瀏覽(27)
  • 【數(shù)據(jù)結構與算法】圖——鄰接表與鄰接矩陣

    【數(shù)據(jù)結構與算法】圖——鄰接表與鄰接矩陣

    圖(Graph)是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為:G(V,E),其中, G表示一個圖,V是頂點的集合,E是邊的集合 。 在圖中數(shù)據(jù)元素,我們則稱之為頂點(Vertex)。 圖中,任意兩個頂點之間都可能有關系,頂點之間的邏輯關系用邊來表示,邊集可以是

    2024年02月02日
    瀏覽(24)
  • 打印螺旋矩陣C++

    打印螺旋矩陣C++

    題目 對于一個 n 行 m 列的表格,我們可以使用螺旋的方式給表格依次填上正整數(shù),我們稱填好的表格為一個螺旋矩陣。 例如,一個 4 行 5 列的螺旋矩陣如下: 輸入描述 輸入兩個整數(shù) n、 m,分別表示螺旋矩陣的行數(shù)和列數(shù)。 輸出描述 輸出一個n行m列的螺旋矩陣。 輸入樣例

    2024年02月11日
    瀏覽(12)
  • java數(shù)據(jù)結構與算法刷題-----LeetCode566. 重塑矩陣

    java數(shù)據(jù)結構與算法刷題-----LeetCode566. 重塑矩陣

    java數(shù)據(jù)結構與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 代碼:時間復雜度O(r*c).除題目要求外,算法本身沒有需要額外空間,空間復雜度O(1) 從0開始算,一個3列n行矩陣中,每行就有3個元

    2024年01月21日
    瀏覽(22)
  • 數(shù)據(jù)結構與算法基礎-學習-23-圖之鄰接矩陣與鄰接表

    數(shù)據(jù)結構與算法基礎-學習-23-圖之鄰接矩陣與鄰接表

    目錄 一、定義和術語 二、存儲結構 1、鄰接矩陣 1.1、鄰接矩陣優(yōu)點 1.2、鄰接矩陣缺點 2、鄰接表 3、鄰接矩陣和鄰接表的區(qū)別和用途 3.1、區(qū)別 3.2、用途 三、宏定義 四、結構體定義 1、鄰接矩陣 2、鄰接表 3、網(wǎng)數(shù)據(jù)類型(造測試數(shù)據(jù)) 五、函數(shù)定義 1、使用鄰接矩陣創(chuàng)建無

    2024年02月14日
    瀏覽(18)
  • java數(shù)據(jù)結構與算法刷題-----LeetCode240. 搜索二維矩陣 II

    java數(shù)據(jù)結構與算法刷題-----LeetCode240. 搜索二維矩陣 II

    java數(shù)據(jù)結構與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 法一:把整個數(shù)組遍歷一遍,時間復雜度O(m*n) 法二:每一行用二分搜索,那么時間復雜度就是O(m * l o g 2 n log_2{n} l o g

    2024年01月22日
    瀏覽(35)
  • java數(shù)據(jù)結構與算法刷題-----LeetCode766. 托普利茨矩陣

    java數(shù)據(jù)結構與算法刷題-----LeetCode766. 托普利茨矩陣

    java數(shù)據(jù)結構與算法刷題目錄(劍指Offer、LeetCode、ACM)-----主目錄-----持續(xù)更新(進不去說明我沒寫完): https://blog.csdn.net/grd_java/article/details/123063846 解題思路 這道題只要換一種理解方式,瞬間就會變的很簡單。 題目描述是每個元素左上和右下對角線元素都相同。但是,我們發(fā)

    2024年01月25日
    瀏覽(25)
  • 劍指 Offer 29. 順時針打印矩陣 / LeetCode 54. 螺旋矩陣(模擬)

    劍指 Offer 29. 順時針打印矩陣 / LeetCode 54. 螺旋矩陣(模擬)

    鏈接:劍指 Offer 29. 順時針打印矩陣;LeetCode 54. 螺旋矩陣 難度:中等 給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。 示例 1: 輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出:[1,2,3,6,9,8,7,4,5] 示例 2: 輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 輸出:

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包