题目 https://uva.onlinejudge.org/external/103/10336.pdf
#include <iostream>
#include <map>#include <algorithm>
#include <stdio.h>
using namespace std;
map<char,int>language_num;
map<char,int>::iterator it;
char square[150][150];
int judge[150][150];
int world =1;
typedef struct
{
char ch;
int num;
}result;
void solve();
bool compare (result a, result b);
void dfs(int x, int y, char cmp);
/
int main()
{
int N;
scanf("%d",&N);
int i,j;
int row,rank;
char ans;
while (N--)
{
language_num.clear();
for(i=0;i<150;i++)
for(j=0;j<150;j++)
{
square[i][j] = '0';
judge[i][j] = 0;
}
scanf("%d%d",&row,&rank);
for(i=1;i<=row;i++)
for(j=1;j<=rank;j++)
{
cin>>ans;
language_num[ans] = 0;
square[i][j] = ans;
}
for(i=1;i<=row;i++)
for(j=1;j<=rank;j++)
{
if(!judge[i][j])
{
dfs(i,j,square[i][j]);
language_num[square[i][j]]++;
}
}
solve();
}
return 0;
}
//
void solve()
{
result temp[language_num.size()];
int count = 0;
for(it = language_num.begin();it!=language_num.end();it++)
{
temp[count].ch = it->first;
temp[count].num= it->second;
count++;
}
sort(temp,temp+language_num.size(),compare);
printf("World #%d\n", world);
world++;
for(int i=0;i<language_num.size();i++)
printf("%c: %d\n", temp[i].ch, temp[i].num);
}
void dfs(int x, int y, char cmp)
{
if(square[x][y+1] == cmp && judge[x][y+1] == 0)
{
judge[x][y+1] = 1;
dfs(x,y+1,cmp);
}
if(square[x+1][y] == cmp && judge[x+1][y] == 0)
{
judge[x+1][y] = 1;
dfs(x+1,y,cmp);
}
if(square[x-1][y] == cmp && judge[x-1][y] == 0)
{
judge[x-1][y] = 1;
dfs(x-1,y,cmp);
}
if(square[x][y-1] == cmp && judge[x][y-1] == 0)
{
judge[x][y-1] = 1;
dfs(x,y-1,cmp);
}
}
bool compare (result a, result b)
{
if(a.num > b.num)
{
return true;
}
if(a.num == b.num)
{
if(a.ch < b.ch)
return true;
return false;
}
return false;
}