矩陣的鋸齒形(或對角形)遍歷(C++)
此問題給定一個二維矩陣。我們的任務是按對角線順序列印矩陣的所有元素。
我們透過一個示例來理解此問題,
1 2 3 4 5 6 7 8 9
輸出 -
1 4 2 7 5 3 8 6 9
我們來看看按鋸齒形或對角形列印矩陣所遵循的模式。

這是對角線遍歷的工作方式。
輸出中的行數始終取決於二維矩陣的行和列。
對於二維矩陣 mat[r][c],將有 r+c-1 個輸出行。
示例
現在,我們來看看程式的解決方案,
#include <iostream>
using namespace std;
#define R 5
#define C 4
int min2(int a, int b)
{ return (a < b)? a: b; }
int min3(int a, int b, int c)
{ return min2(min2(a, b), c);}
int max(int a, int b)
{ return (a > b)? a: b; }
void printDiagonalMatrix(int matrix[][C]){
for (int line=1; line<=(R + C -1); line++){
int start_col = max(0, line-R);
int count = min3(line, (C-start_col), R);
for (int j=0; j<count; j++)
cout<<matrix[min2(R, line)-j-1][start_col+j]<<"\t";
cout<<endl;
}
}
int main(){
int M[R][C] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16},
{17, 18, 19, 20},};
cout<<"The matrix is : \n";
for (int i=0; i< R; i++){
for (int j=0; j<C; j++)
cout<<M[i][j]<<"\t";
cout<<endl;
}
cout<<"\nZigZag (diagnoal) traversal of matrix is :\n";
printDiagonalMatrix(M);
return 0;
}輸出
The matrix is : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ZigZag (diagonal) traversal of matrix is : 1 5 2 9 6 3 13 10 7 4 17 14 11 8 18 15 12 19 16 20
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP