<pre name="code" class="cpp">#include <stdio.h>
#define DEBUG 0
#define TESTCASES 8
#define MAX 10
//結構體可當形參,跟數組一樣退化為指針,還可以直接指派
typedef struct Square{
int size;
char arrayOfChars[MAX + 1][MAX + 1];
}Square;
Square initialSquare;
Square finalSquare;
Square rotateClockwise90(Square square){
Square squareTransformed;
squareTransformed.size = square.size;
int row, column;
for (row = 0; row < square.size; row++)
for (column = 0; column < square.size; column++)
squareTransformed.arrayOfChars[column][square.size - 1 - row] = square.arrayOfChars[row][column];
//可傳回結構體當其他函數的形參
return squareTransformed;
}
Square reflect(Square square){
Square squareTransformed;
squareTransformed.size = square.size;
int row, column;
for (row = 0; row < square.size; row++)
for (column = 0; column < square.size; column++)
squareTransformed.arrayOfChars[row][square.size - 1 - column] =
square.arrayOfChars[row][column];
return squareTransformed;
}
int compare(Square squareTransformed){
if (squareTransformed.size != finalSquare.size)
return 0;
int row, column;
for (row = 0; row <squareTransformed.size; row++)
for (column = 0; column < squareTransformed.size; column++)
if (squareTransformed.arrayOfChars[row][column] != finalSquare.arrayOfChars[row][column])
return 0;
return 1;
}
int main(){
#if DEBUG
int testCase;
for (testCase = 1; testCase <= TESTCASES; testCase++){
char inputFileName[20] = "inputX.txt";
inputFileName[5] = '1' + (testCase - 1);
freopen(inputFileName, "r", stdin);
printf("\n#%d\n", testCase);
#endif
int size;
scanf("%d", &size);
initialSquare.size = size;
finalSquare.size = size;
int row;
for (row = 0; row < size; row++)
//注意輸入字元串一定是從arrayOfChars[row][0],不是arrayOfChars[row][1]開始存儲
//為了對稱,row也要從0開始輸入
scanf("%s", initialSquare.arrayOfChars[row]);
for (row = 0; row < size; row++)
scanf("%s", finalSquare.arrayOfChars[row]);
//用來緩存變換過程中的圖形,避免重複計算
Square bufferSquare;
int transformation;
if ( compare( bufferSquare = rotateClockwise90(initialSquare) ) == 1 )
transformation = 1;
else if ( compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1 )
transformation = 2;
else if ( compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1 )
transformation = 3;
else if ( compare( bufferSquare = reflect(initialSquare) ) == 1)
transformation = 4;
else if ( (compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) ||
(compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) ||
(compare( bufferSquare = rotateClockwise90(bufferSquare) ) == 1) )
transformation = 5;
else if (compare(initialSquare) == 1)
transformation = 6;
else
transformation = 7;
printf("%d\n", transformation);
#if DEBUG
}
#endif
return 0;
}