1 条题解
-
0
C :
#include<stdio.h> int x[6][6],t,c; void xiao(int m,int n) { if(m>0&&x[m-1][n]==t){c++;x[m-1][n]=0;xiao(m-1,n);} if(m<5&&x[m+1][n]==t){c++;x[m+1][n]=0;xiao(m+1,n);} if(n>0&&x[m][n-1]==t){c++;x[m][n-1]=0;xiao(m,n-1);} if(n<5&&x[m][n+1]==t){c++;x[m][n+1]=0;xiao(m,n+1);} } void he1() { int i,j,k; for(k=0;k<5;k++) for(i=5;i>0;i--) for(j=0;j<=5;j++) if(x[i][j]==0) { x[i][j]=x[i-1][j]; x[i-1][j]=0; } } void he2() { int i,j,k,l; for(l=0;l<5;l++) for(j=0;j<5;j++) for(i=0;i<6;i++) { if(x[i][j]!=0)break; if(i==5) for(k=0;k<6;k++) { x[k][j]=x[k][j+1]; x[k][j+1]=0; } } } void p() { int i,j; for(i=0;i<6;i++) { for(j=0;j<6;j++) printf("%d",x[i][j]); printf("\n"); } } int main() { int i,j,n,m; // freopen("test.in","r",stdin); // freopen("test.out","w",stdout); while(scanf("%d%d",&m,&n)==2) { for(i=0;i<6;i++) for(j=0;j<6;j++) scanf("%1d",&x[i][j]); m--;n--; t=x[m][n];x[m][n]=0; c=1;xiao(m,n); if(c>=5){he1();he2();p();}else printf("Can't\n"); } return 0; }
C++ :
#include <bits/stdc++.h> using namespace std; int d[10][10]; int dd; void dfs(int x,int y,int data){ if ((x<1||x>6||y<1||y>6||d[x][y]!=data)) return; dd++; d[x][y]=0; dfs(x-1,y,data); dfs(x+1,y,data); dfs(x,y-1,data); dfs(x,y+1,data); } void move(){ for (int i=6;i>=2;i--){ for (int s=1;s<=6;s++){ if (d[i][s]==0){ swap(d[i][s],d[i-1][s]); } } } for (int i=1;i<6;i++){ int ok=1; for (int s=1;s<=6;s++){ if (d[s][i]!=0){ ok=0; } } if (ok){ for (int s=1;s<=6;s++){ swap(d[s][i],d[s][i+1]); } ok=0; } } } void print(){ for (int i=1;i<=6;i++){ for (int s=1;s<=6;s++){ printf("%d",d[i][s]); } printf("\n"); } } int main() { int n,m; while(~scanf("%d%d",&n,&m)){ dd=0; char as[10][10]; for (int i=1;i<=6;i++){ scanf("%s",as[i]); } for (int i=1;i<=6;i++){ for (int s=0;s<6;s++){ d[i][s+1]=as[i][s]-'0'; } } dfs(n,m,d[n][m]); if (dd<=4){ printf("Can't\n"); continue; } for (int i=0;i<6;i++) move(); print(); } return 0; }
- 1
信息
- ID
- 3579
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者