24h購物| | PChome| 登入
2009-07-30 20:35:10| 人氣654| 回應0 | 上一篇 | 下一篇

ACM 10336 Q10336: Rank the Languages

推薦 0 收藏 0 轉貼0 訂閱站台

作法:BFS 或 DFS

這裡採用DFS搜尋,

/*********************************************************/

#include<stdio.h>
#include<stdlib.h>
int map[102][102]={0},appear[102][102]={0};
void DFS (int x,int y,int c)
{
  if(map[x+1][y]==c&&appear[x+1][y]==0)
     {appear[x+1][y]=1;DFS (x+1,y,c);}
  if(map[x][y+1]==c&&appear[x][y+1]==0)
     {appear[x][y+1]=1;DFS (x,y+1,c);}
  if(map[x-1][y]==c&&appear[x-1][y]==0)
     {appear[x-1][y]=1;DFS (x-1,y,c);}
  if(map[x][y-1]==c&&appear[x][y-1]==0)
     {appear[x][y-1]=1;DFS (x,y-1,c);}
}
main()
{
  int t,time=1,a,b,c;
  scanf("%d",&t);
  while(t--)
      {
         int n,m,num[256]={0};
         char s[102];
         scanf("%d %d",&n,&m);
         for(a=1;a<=n;a++)
           {
             scanf("%s",s);
              for(b=1,c=0;b<=m;b++,c++)
                 {map[a][b]=s[c];appear[a][b]=0;}
           }
         for(a=1;a<=n;a++)
           for(b=1;b<=m;b++)
              if(appear[a][b]==0)
                 {
                   DFS(a,b,map[a][b]);
                   num[map[a][b]]++;
                 }
          int max=0;
          for(a='a';a<='z';a++) if(num[a]>max) max=num[a];
          printf("World #%d\n",time++);
          for(a=max;a>=1;a--)
             for(b='a';b<='z';b++)
                 if(num[b]==a)
                    printf("%c: %d\n",b,a);
      }
 return 0;
}

台長: 來源不明
人氣(654) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 10168 Q10168 Summation of Four Primes
此分類上一篇:ACM 294 Q294: Divisors

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文