矩陣的遍歷--按行、按列、蛇形
阿新 • • 發佈:2018-12-30
這裡有一個假設:
在影象處理等領域中,二維矩陣已經按照行的方式存放在了一維陣列mat中了。
矩陣的高記為height,寬記為width;
1.按行遍歷
for (int i = 0; i < height; ++i)
for (int j = 0; j < width; ++j)
mat[i*width + j];
2.按列遍歷
僅需調換一下兩個for語句的順序。
3.蛇形遍歷for (int j = 0; j < width; ++j) for (int i = 0; i < height; ++i) mat[i*width + j];
蛇形遍歷只適合於正方形的矩陣,邊長記為n。
基本思想是:讓橫縱座標同時變化,就會按照蛇形進行遍歷。
for (int k = 0; k < n; ++k)
for (int i = k, j = 0; i >= 0; --i, ++j)
mat[i*n + j];
下面是一段完整的蛇形遍歷的程式碼:
實現的功能是:生成一個蛇形的矩陣,並且將該矩陣輸出。
輸入5: 輸出: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11#include<iostream> using namespace std; int main() { int n; while (cin >> n) { int count = 1; int* array = new int[n*n](); //生成蛇形矩陣 for (int k = 0; k < n; ++k) for (int i = k, j = 0; i >= 0; --i, ++j) { array[i*n + j] = count; count++; } //輸出矩陣 for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) if (array[i*n + j]) if (array[i*n + j + 1] && j < n - 1) cout << array[i*n + j] << ' '; else cout << array[i*n + j]; cout << endl; } } }