您的位置:首页 > 其它

USACO 1.2 Transformations (用结构体来模拟)

2015-09-11 21:44 429 查看
<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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息