Rt
AC on #5
代码如下
#include<bits/stdc++.h>
using namespace std;
int n,k;bool vis[110][12];
string s[110];
queue<char> q;
int d[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
int dfs(int x,int y){
int ans=1;vis[x][y]=1;
for(int i = 0;i<4;i++){
int dx=x+d[i][0],dy=y+d[i][1];
if(dx<=n&&dx>=1&&dy<=10&&dy>=1&&vis[dx][dy]==0&&s[dx][dy]==s[x][y])ans+=dfs(dx,dy);
}
return ans;
}
void clear(int x,int y){
s[x][y]='0';vis[x][y]=0;
for(int i = 0;i<4;i++){
int dx=x+d[i][0],dy=y+d[i][1];
if(dx<=n&&dx>=1&&dy<=10&&dy>=1&&vis[dx][dy])clear(dx,dy);
}
}
bool find(){
bool f=0;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=10;j++){
if(s[i][j]!='0'&&dfs(i,j)>=k)clear(i,j),f=1;
}
}
return f;
}
void down(){
int k;bool f=0;
for(int j = 1;j<=10;j++){
for(int i = n;i;i--){
if(s[i][j]!='0')q.push(s[i][j]);
}
for(int i = n;i;i--){
if(q.empty())s[i][j]='0';
else s[i][j]=q.front(),q.pop();
}
}
}
int main(){
cin>>n>>k;
for(int i = 1;i<=n;i++){cin>>s[i];s[i]=" "+s[i];}
while(1){
if(find())down();
else break;
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<=10;j++)cout<<s[i][j];
cout<<endl;
}
}