24h購物| | PChome| 登入
2009-03-11 19:28:16| 人氣615| 回應0 | 上一篇 | 下一篇

ACM 572 Oil Deposits

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

遞迴的DFS!!

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

#include<stdio.h>                 
#include<stdlib.h>     
char map[102][102],x[100];
void map2(int b,int a,int ans)
{
  if(map[b-1][a]=='@') { map[b-1][a]=ans;map2(b-1,a,ans); }
  if(map[b-1][a-1]=='@') { map[b-1][a-1]=ans; map2(b-1,a-1,ans); }
  if(map[b-1][a+1]=='@') { map[b-1][a+1]=ans; map2(b-1,a+1,ans); }
  if(map[b][a-1]=='@') { map[b][a-1]=ans; map2(b,a-1,ans); }
  if(map[b][a+1]=='@') { map[b][a+1]=ans; map2(b,a+1,ans); }
  if(map[b+1][a]=='@') { map[b+1][a]=ans; map2(b+1,a,ans); }
  if(map[b+1][a-1]=='@') {map[b+1][a-1]=ans; map2(b+1,a-1,ans); }
  if(map[b+1][a+1]=='@') {map[b+1][a+1]=ans; map2(b+1,a+1,ans); }
}
main()     
{     
 int a,b,c,n,m,time=0;
 while(scanf("%d %d ",&n,&m)==2)
  {
   if(n==0&&m==0) break;
   for(a=0;a<102;a++)
    for(b=0;b<102;b++)
     map[a][b]='*';
   int ans=0;
   for(b=1;b<=n;b++)
    {
     scanf("%s",x);
     for(a=1;a<=m;a++)
      map[b][a]=x[a-1];
    }
   
    for(b=1;b<=n;b++)
      for(a=1;a<=m;a++)
        if(map[b][a]=='@')
         {
          ans--;
          map[b][a]=ans;
          map2(b,a,ans);
         }
    printf("%d\n",abs(ans));
  }
 return 0;     
}

台長: 來源不明
人氣(615) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 476 476 - Points in Figures: Rectangles
此分類上一篇:ACM 402 M*A*S*H

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