從矩陣中取出子矩陣

2021-08-18 21:39:16 字數 1007 閱讀 9512

探索乙個簡單的演算法,從矩陣中取出乙個小矩陣應該怎樣實現。

具體什麼意思呢,比方說我們現在有乙個int型的陣列,將其用矩陣的形式寫出來就會長這個樣子:

int arr =;
用類似矩陣的形狀寫出來如下:

int arr =;
以上是乙個5x5的矩陣形狀,我們如果要在這裡面取乙個子矩陣,要求就是必須子矩陣的寬高都是小於等於父矩陣,在這裡就是小於等於5。

假設我們要在這個矩陣裡面取出乙個子矩陣,所需要的條件是:

父矩陣資料,父矩陣寬高,子矩陣寬高,子矩陣左上角的xy座標

所以我們需要7個條件才能準確的知道子矩陣的資訊

假設我們需要乙個長為2,寬為2,位置在x=2,y=3的位置(0是起始位置),那麼我們就應該得到如下子矩陣:

int child =

現在我們需要製作乙個黑盒子,輸入7位元素,黑盒子給我乙個我需要的子矩陣。

直接上黑盒子的原理好了

/**

*@param arr 待擷取陣列

*@param x 待擷取位置待x座標

*@param y 待擷取位置的y座標

*@param rw 需要擷取的長度

*@param rh 需要擷取的寬度

*@param w arr陣列的原始寬度

*@param h arr陣列的原始高度

*@return 已擷取完畢的陣列

*/private

static

int getspecilarr(int arr, int x, int y, int rw, int rh, int w, int h)

int result = new

int[rw * rh];

for (int i = 0; i < rh; i++)

}return result;

}

結束!

(觀眾:怎麼那麼突然!!!)

最優子矩陣

上一題 有序數對 最優子矩陣 題目描述 給定乙個n n的矩陣 對於乙個k k的子矩陣 k任意 設a為其主對角線上的元素之和 主對角線即左上 右下對角線 設b為其副對角線上的元素之和 求乙個k k的子矩陣,使得其a b最大。輸入資料 第一行乙個整數n,表示矩陣的大小,以下n行,每行n個數,描述這個矩陣...

子矩陣求和

給出乙個m n的矩陣a,矩陣元素ai,j小於1000,進行q次查詢,每次查詢給出子矩陣的4個邊界 上下左右 求該子矩陣所有元素之和。樣例中第乙個查詢 1 3 1 2 表示從第1行到第3行,從第1列到第2列,對應的子矩陣是 1 25 6 9 10 求和等於33 第一行2個整數n,m,中間用空格分割,分...

子矩陣 單調佇列

問題描述 小 a 有乙個 n m 的矩陣,矩陣中 1 n m 這 n m 個整數均出現過一次。現在小 a 在這個矩陣內選擇乙個子矩陣,其權值等於這個子矩陣中的所有數的最 小值。小 a 想知道,如果他選擇的子矩陣的權值為 i 1 i n m 那麼他選擇 的子矩陣可能有多少種?小 a 希望知道所有可能的...