A - Flip and Turn

本文详细介绍了如何解决POJ-3106 A-FlipandTurn问题,通过使用C++实现矩阵翻转与旋转算法,并提供了一种简洁有效的解决方案。该算法能够判断两个矩阵是否可以通过特定的翻转和旋转操作变得一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
char a[309][309];
char b[309][309];
char cp[7][3]= {"1","CX","V","BY","AZ","2","H"}; //在一行说明他们转动后相同。
char dp[7][8]= {"1","1H","1H1","1H1H","1H1H1H","1H1H1","H"}; //以1和H为根本,转动。总会因为HH相遇而不需要操作,同理!yeshiruci
char sk[10];//不会出现八个以上的操作。
int cnt;
string s;
int m,n;
void work(char cmd)
{
    for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++)
        {
            if(cmd=='1')
                b[j][i]=a[i][j];
            if(cmd=='H')
                b[m-i+1][j]=a[i][j];
        }
    if(cmd=='1')
        swap(m,n);
    for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++)
            a[i][j]=b[i][j];


}
void zh(char cmd)
{
    for(int i=0; i<7; i++)
    {
        if(strchr(cp[i],cmd)!=NULL)//如果在cp中找不到,则返回NULL;
        {
            int len=strlen(dp[i]);
            for(int j=0; j<len; j++)
            {
                if(cnt>0&&sk[cnt-1]==dp[i][j])//因为总会有重复的操作,所以只要有重复的一定要去掉前一个。
                    cnt--;
                else
                    sk[cnt++]=dp[i][j];
                if(cnt>=8)
                    cnt=0;
            }
            break;
        }
    }
}
int main()
{
    while(cin>>m>>n)
    {
        getchar();
        cnt=0;
        for(int i=1;i<=m; i++)
            cin>>a[i]+1;//使下标从一开始
        getchar();
        cin>>s;
        for(int i=0; s[i]!='\0'; i++)
            zh(s[i]);
        for(int i=0; i<cnt; i++)
            work(sk[i]);
            cout<<m<<" "<<n<<endl;
        for(int i=1; i<=m; i++)
        {
            for(int j=1; j<=n; j++)
                cout<<a[i][j];//必须输出a,有可能没有操作。
            cout<<endl;
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值