例如給你一個 4 * 4 的矩陣,如下:
‧X‧X
‧‧‧‧
‧‧X‧
而矩陣的旋轉以及鏡照有以下幾種情況:
(1) 90 Degree Rotation:矩陣向右旋轉 90 度。
‧‧XX
X‧‧‧
‧‧X‧
(2) 180 Degree Rotation:矩陣向右旋轉 180 度。
‧‧‧‧
X‧X‧
‧‧X‧
(3) 270 Degree Rotation:矩陣向右旋轉 270 度。
‧‧‧X
XX‧‧
‧‧‧‧
(4) Vertical Reflection:水平鏡照,上下如同看鏡子似的,相互鏡照。
‧‧‧‧
‧X‧X
‧X‧‧
(5) Combination:水平鏡照加上一個角度的旋轉。(以下是水平鏡照加上右轉 90 度角)
XX‧‧
‧‧‧X
‧X‧‧
(6) Preservation:一開始就和原本的一樣。
(7) Improper:以上狀況都不符合的情況。
其實關鍵就在於你會不會寫轉換函式,寫完幾乎就已經完成了。以下為關鍵函式程式碼:
void rotation90()
{
int i, j;
for (i = 0; i < n; i ++)
strcpy(s[i], replace[i]);
for (i = 0; i < n; i ++)
for (j = 0; j < n; j ++)
replace[i][j] = s[n - j - 1][i];
}
void rotation180()
{
int i, j;
for (i = 0; i < n; i ++)
strcpy(s[i], replace[i]);
for (i = 0; i < n; i ++)
for (j = 0; j < n; j ++)
replace[n - i - 1][j] = s[i][n - j - 1];
}
void rotation270()
{
int i, j;
for (i = 0; i < n; i ++)
strcpy(s[i], replace[i]);
for (i = 0; i < n; i ++)
for (j = 0; j < n; j ++)
replace[j][i] = s[i][n - j - 1];
}
void reflection()
{
int i, j;
for (i = 0; i < n; i ++)
strcpy(s[i], replace[i]);
for (i = 0; i < n; i ++)
for (j = 0; j < n; j ++)
replace[n - j - 1][i] = s[j][i];
}
By David.K
p466題目連結
回ACM題庫目錄
回首頁
沒有留言:
張貼留言