#55509: c++ dfs掃圖


61247091s@gapps.ntnu.edu.tw (wei)


#include <bits/stdc++.h>
using namespace std;

int m,n;
char a[105][105];
bool mem[105][105];
map <char,int> mp;

void dfs(int r,int c,char curr){
    if(r<0||c<0||r>=m||c>=n)return;
    if(mem[r][c]==true)return;
    if(a[r][c]!=curr)return;
    a[r][c]='#';
    mem[r][c]=true;

    dfs(r+1,c,curr);
    dfs(r-1,c,curr);
    dfs(r,c+1,curr);
    dfs(r,c-1,curr);

    return;
}

int main(){
    int t,cnt=1;
    cin>>t;
    while(t--){
    cin>>m>>n;
    memset(mem,false,sizeof(mem));
    mp.clear();
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++) cin>>a[i][j];}

    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            if(a[i][j]!='#'){
                mp[a[i][j]]++;
                dfs(i,j,a[i][j]);
                }
        }}

    vector<pair<char, int>> v(mp.begin(), mp.end());
    sort(v.begin(), v.end(), [](const auto& a, const auto& b) {
        return a.second != b.second ? a.second > b.second : a.first < b.first;
    });
    cout<<"World #"<<cnt<<"\n";    
    for(auto &p:v)cout<<p.first<<": "<<p.second<<"\n";
    cnt++;
    }
    return 0;
}