Code: Select all
#include <bits/stdc++.h>
using namespace std;
char Grid[1000][1000];
int ans[100000];
int n , m , ANS;
int dx[]={1,-1,0,0,1,-1,1,-1};
int dy[]={0,0,-1,1,1,-1,-1,1};
bool Check(int i ,int j){
for(int a =0; a<4 ; a++){
if(Grid[i+dx[a]][j+dy[a]]=='_') return false;
}
return true;
}
void DFS(int i , int j){
if(Grid[i][j]=='X'){
if(Check(i,j)) ANS++;
Grid[i][j]='_';
}
else if(Grid[i][j]=='*') Grid[i][j]='.';
for(int a =0 ; a< 4 ; a++){
int x = i+dx[a];
int y = j+dy[a];
if(x>=0 && x<n && y>=0 && y<m && (Grid[x][y]=='*' || Grid[x][y]=='X') ) DFS(x,y);
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int x=0;
while(cin>>m>>n && n+m){
int p=0;
for(int i =0 ; i < n ; i++) cin>>Grid[i];
for(int i =0 ; i < n ; i++)
for(int j=0 ;j < m ;j++)
if(Grid[i][j]=='*' || Grid[i][j]=='X'){
ANS=0;
DFS(i,j);
ans[p++]=ANS;
}
// for(int i =0 ; i < n ; i++) cout<<Grid[i]<<endl;
sort(ans,ans+p);
printf("Throw %d\n",++x);
int i;
for( i =0 ; i < p -1 ; i++) cout<<ans[i]<<" ";
cout<<ans[i]<<'\n';
cout<<'\n';
}
return 0;
}
why wa