USACO-Section1.3 Transformations (矩阵旋转匹配问题)
生活随笔
收集整理的這篇文章主要介紹了
USACO-Section1.3 Transformations (矩阵旋转匹配问题)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
2017-5-26
題目描述
給你兩個(gè)n*n的字符矩陣,給你幾種變換方式,輸出從第一種狀態(tài)到第二種狀態(tài) 的最小操作序號(hào)解答
我的方法就是直接從1到7挨個(gè)判斷,滿(mǎn)足題意就輸出,直接結(jié)束,否則繼續(xù) 代碼比較長(zhǎng)代碼
/* ID: 18795871 PROG: transform LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;ifstream fin("transform.in"); ofstream fout("transform.out");const int N = 10; char x[N+1][N+1],y[N+1][N+1],z[N+1][N+1],w[N+1][N+1]; int n;void Trans1(char p[N+1][N+1],char q[N+1][N+1]){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ p[j][n-i-1]=q[i][j]; } } }void Trans2(char p[N+1][N+1],char q[N+1][N+1]){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ p[n-i-1][n-j-1]=q[i][j]; } } }void Trans3(char p[N+1][N+1],char q[N+1][N+1]){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ p[n-j-1][i]=q[i][j]; } } }void Trans4(char p[N+1][N+1],char q[N+1][N+1]){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ p[i][n-j-1]=q[i][j]; } } }void Trans5(char p[N+1][N+1],char q[N+1][N+1],int num){ switch(num){ case 1: Trans1(p,q); break; case 2: Trans2(p,q); break; case 3: Trans3(p,q); } }bool isOK(char p[N+1][N+1],char q[N+1][N+1]){ for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ if (p[i][j]!=q[i][j]) return false; } } return true; }int main(){ int i,j; while (fin>>n){ for (i=0;i<n;i++){ for (j=0;j<n;j++){ fin>>x[i][j]; } } for (i=0;i<n;i++){ for (j=0;j<n;j++){ fin>>y[i][j]; } } Trans1(z,x); if (isOK(z,y)){ fout<<1<<endl; continue; } Trans2(z,x); if (isOK(z,y)){ fout<<2<<endl; continue; } Trans3(z,x); if (isOK(z,y)){ fout<<3<<endl; continue; } Trans4(z,x); if (isOK(z,y)){ fout<<4<<endl; continue; } bool f=false; Trans4(z,x); for (i=1;i<=3;i++){ Trans5(w,z,i); if (isOK(w,y)){ fout<<5<<endl; f=true; break; } } if (isOK(x,y)){ fout<<6<<endl; continue; } if (!f) fout<<7<<endl; } return 0; }個(gè)人感覺(jué)需要注意的地方:
(1)注意旋轉(zhuǎn)之前和旋轉(zhuǎn)之后的位置關(guān)系,得到正確的轉(zhuǎn)換方式
(2)將函數(shù)封裝起來(lái),有助于第五個(gè)的判斷
(3)我們不應(yīng)該先判斷6,如:
這兩個(gè)其實(shí)是一樣的,但是我們要輸出2,因?yàn)樗孟扰袛嗍欠衲軌蚪?jīng)過(guò)180度旋轉(zhuǎn)得到。
總結(jié)
以上是生活随笔為你收集整理的USACO-Section1.3 Transformations (矩阵旋转匹配问题)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python模块和包
- 下一篇: springboot整合jpa之连接My