要点:
1.确定下坠4*4方块为1的格子在15*10大矩阵里的列数,4*4方块坐标从(1,1)开始的话列数对应就为1+n-1(n为最左边开始在大矩阵里的那一列)
2.整体性,4*4方块为1的坐标要单独保存,这几个为1的连通的4个方块必须整体下坠,当最下部分方块先触碰到第15行或者任意一个方块碰到大矩阵里为1的方块就结束。
#include <bits/stdc++.h> using namespace std; int a[16][11]; int b[5][5]; int x[5];int y[5];//存为1下坠块的坐标' int n; int main() { for(int i=1;i<=20;i++) { if(i>=1&&i<=15) { for(int j=1;j<=10;j++) { cin>>a[i][j]; } } if(i>=16&&i<=19) { for(int j=1;j<=4;j++) { cin>>b[i-15][j]; } } if(i==20){ cin>>n; } } int x_max=0; int t=1; for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++)//大方块中从j=n开始,4->15,3->14,2->13,1->12行,行+11,j+n-1如何控制下坠的整体性?直接找出四个方块的坐标啊整体看 { if(b[i][j]==1) { if(i>x_max) { x_max=i; } x[t]=i;y[t]=j; t++; } } } int x1,x2,x3,x4,y1,y2,y3,y4; x1=x[1];y1=y[1]+n-1; x2=x[2];y2=y[2]+n-1; x3=x[3];y3=y[3]+n-1; x4=x[4];y4=y[4]+n-1; while(a[x1+1][y1]==0&&a[x2+1][y2]==0&&a[x3+1][y3]==0&&a[x4+1][y4]==0&&x_max<15) { x_max++; x1++;x2++;x3++;x4++; } a[x1][y1]=1;a[x2][y2]=1;a[x3][y3]=1;a[x4][y4]=1; for(int i=1;i<=15;i++) { for(int j=1;j<=10;j++) { cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
[CSP]俄罗斯方块(枚举+模拟)
于 2024-09-24 22:00:57 首次发布