這裏有一個假設:
在圖像處理等領域中,二維矩陣已經按照行的方式存放在了一維數組mat中了。
矩陣的高記爲height,寬記爲width;
1.按行遍歷
for (int i = 0; i < height; ++i)
for (int j = 0; j < width; ++j)
mat[i*width + j];
2.按列遍歷僅需調換一下兩個for語句的順序。
for (int j = 0; j < width; ++j)
for (int i = 0; i < height; ++i)
mat[i*width + j];
3.蛇形遍歷蛇形遍歷只適合於正方形的矩陣,邊長記爲n。
基本思想是:讓橫縱座標同時變化,就會按照蛇形進行遍歷。
for (int k = 0; k < n; ++k)
for (int i = k, j = 0; i >= 0; --i, ++j)
mat[i*n + j];
下面是一段完整的蛇形遍歷的代碼:
實現的功能是:生成一個蛇形的矩陣,並且將該矩陣輸出。
#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;
}
}
}