文章
1
粉丝
0
获赞
4
访问
100
一开始写这个花了大量时间写了各个方向的合并逻辑,不仅工作量大还极易搞混数组的下标,后面发现结合矩阵旋转就可以极大减小工作量从而实现考场快速解题。
具体就是只写一个方向的合并逻辑,然后无论什么方向的合并都先将矩阵旋转到这个方向,再旋转回去,从而实现四个方向的合并。
代码如下:
#include<bits/stdc++.h>
using namespace std;
void up(vector<vector<int> >& a){
for(int j=0;j<4;j++){
for(int i=1;i<4;i++){
int pos=i;
while(a[pos-1][j]==0){
swap(a[pos][j],a[pos-1][j]);
pos--;
if(pos==0)break;
}
if(pos!=0){
if(a[pos][j]==a[pos-1][j]){
a[pos-1][j]*=2;
a[pos][j]=0;
}
}
}
}
}
void rotate90(vector<vector<int> >& a){
vector<vector<int> > res(4,vector<int>(4));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)res[j][4-i-1]=a[i][j];
}
a=res;
}
int main(){
int n;
cin>>n;
vector<vector<int> > mat(4,vector<int>(4));
for(int i=0;i<4;i++){
for(int j=0;j<4;j++)cin>>mat[i][j];
}
if(n==1)up(mat);
else if(n==2){
rotate90(mat);
...
登录后发布评论
暂无评论,来抢沙发