Z字形掃描
類別
數組
時間限制
1S
內存限制
256Kb
問題描述
在圖像編碼的算法中,需要將一個給定的方形矩陣進行Z字形掃描(Zigzag Scan)。給定一個m×n的矩陣,Z字形掃描的過程如下圖所示。
對於下面給出的4×4的矩陣:
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
對其進行Z字形掃描後得到長度爲16的序列如下所示:
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
請實現一個Z字形掃描的程序,給定一個n×n的矩陣,輸出對這個矩陣進行Z字形掃描的結果。
輸入說明
數據的第一行爲整數n(n<100),表示矩陣的行和列數;接下來的n行數據,每行分別爲n個整數值(每個整數值都不超過1000),即矩陣的值
輸出說明
在一行上輸出Z字形掃描得到的整數序列,整數之間用空格分隔
輸入樣例
4
1 5 3 9
3 7 5 6
9 4 6 4
7 3 1 3
輸出樣例
1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3
以下解法是我模擬了一下掃描的過程,可能比較複雜不容易讀,之後會更新
#include<stdio.h>
int main()
{
int i,j,n,t=0;
int a[100][100];
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
i=0;
j=0;
printf("%d ",a[0][0]);
t++;
while(t<n*n)
{
j++;
if(i>=0&&i<n&&j>=0&&j<n)
{
printf("%d ",a[i][j]);
t++;
}
i++;
j--;
while(i>=0&&i<n&&j>=0&&j<n)
{
printf("%d ",a[i][j]);
i++;
j--;
t++;
}
i--;
j++;
i++;
if(i>=0&&i<n&&j>=0&&j<n)
{
printf("%d ",a[i][j]);
t++;
}
i--;
j++;
while(i>=0&&i<n&&j>=0&&j<n)
{
printf("%d ",a[i][j]);
i--;
j++;
t++;
}
i++;
j--;
}
}
更新-