Problem Link–https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1277
Solution:
#include<iostream>
using namespace std;
char s[1000][1000];
int a[30],b[30];
bool visited[1000][1000]= {false};
void dfs(int i,int j,int m,int n,char c)
{
if(visited[i][j]) return;
if(i<0 or j<0 or i==m or j==n) return;
if(s[i][j]!=c) return;
visited[i][j] = true;
dfs(i+1,j,m,n,c);
dfs(i-1,j,m,n,c);
dfs(i,j+1,m,n,c);
dfs(i,j-1,m,n,c);
}
void bubSort()
{
for(int i=0; i<30; i++)
{
for(int j=0; j<30; j++)
{
if(a[i]>a[j])
{
swap(a[i],a[j]);
swap(b[i],b[j]);
}
if(a[i]==a[j])
{
if(j>i)
{
swap(a[i],a[j]);
swap(b[i],b[j]);
}
}
}
}
}
void clearVisited()
{
for(int i=0;i<1000;i++)
{
for(int j=0;j<1000;j++){
visited[i][j]=false;
}
}
}
int main()
{
int t,m,n,world=0;
cin>>t;
while(t--)
{
world++;
cin>>m>>n;
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
cin>>s[i][j];
}
}
for(int i=0; i<30; i++)
{
a[i]=0;
b[i]=i;
}
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
int x=s[i][j]-'a';
if(!visited[i][j])
{
dfs(i,j,m,n,s[i][j]);
a[x]+=1;
}
}
}
bubSort();
cout<<"World #"<<world<<endl;
for(int i=0; i<30; i++)
{
if(a[i]!=0)
{
printf("%c: %d\n",b[i]+'a',a[i]);
}
}
clearVisited();
}
}
Leave a Reply