XDOJ Z字形掃描

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--;
}
}

更新-
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章