翻转吧!方块

来源:互联网 发布:vb 获取当月第一天 编辑:程序博客网 时间:2024/05/17 20:29

#include <stdio.h>char a[10][10];char b[10][10];char c[10][10];void rotate(int n){ int i,j;int k;for(i=0,j=n-1;i<n;i++,j--) {for(k=0;k<n;k++) {b[k][j]=a[i][k];        }   }           for(i=0;i<n;i++) {for(j=0;j<n;j++) {a[i][j]=b[i][j];        }   }}int turn(int n) {    int i,j;    int mid =n/2;    int k;    for(i=0,j=n-1;i<mid;i++,j--) {        for(k=0;k<n;k++){           if(a[k][i]!=a[k][j]) {              a[k][i]=(a[k][i]+a[k][j]) -(a[k][j]=a[k][i]);           }        }    }}int equal(int n) {    int i,j;    for(i=0;i<n;i++) {        for(j=0;j<n;j++) {            if(a[i][j]!=c[i][j]) return 0;        }    }    return  1;}int way(int i,int n) {    switch(i) {        case 1: rotate(n);if(equal(n)) return 1; else { rotate(n);rotate(n);rotate(n); return 0;}        case 2: rotate(n);rotate(n);if(equal(n)) return 1; else {rotate(n); rotate(n); return 0;}        case 3: rotate(n);rotate(n);rotate(n);if(equal(n)) return 1; else {rotate(n);return 0;}        case 4: turn(n);if(equal(n)) return 1; else {turn(n);return 0;}        case 5: turn(n);                rotate(n); if(equal(n)) return 1;                rotate(n); if(equal(n)) return 1;                rotate(n); if(equal(n)) return 1;                rotate(n);                turn(n);                return 0;        case 6:if(equal(n))return 1; else return 0;        case 7: return 1;    }}int main(int argc, char* argv) {int n;while(scanf("%d",&n)!=EOF) {         int i,j;         char t=getchar();         for(i=0;i<n;i++) {              for(j=0;j<n;j++) {                  scanf("%c",&a[i][j]);              }              t=getchar();         }         for(i=0;i<n;i++) {              for(j=0;j<n;j++) {                  scanf("%c",&c[i][j]);              }              t=getchar();         }         for(i=1;i<=7;i++){            if(way(i,n)) {                printf("%d\n",i);                break;            }         }        }}


0 0
原创粉丝点击