2010年10月4日月曜日

PKU Judge Online 2386 Lake Counting

■2386 Lake Counting

□Problem
プログラミングコンテストチャレンジブック参照

□Solution
プログラミングコンテストチャレンジブック参照

□Code
  1. package p2386;  
  2.   
  3. import java.util.*;  
  4. import java.lang.*;  
  5. import java.math.*;  
  6. import java.io.*;  
  7.   
  8. import static java.lang.Math.*;  
  9. import static java.util.Arrays.*;  
  10.   
  11. // AC  
  12. public class Main{  
  13.   
  14.     Scanner sc=new Scanner(System.in);  
  15.   
  16.     final int INF=1<<28;  
  17.     final double EPS=1e-9;  
  18.   
  19.     int n, m;  
  20.     int[][] a;  
  21.     boolean[][] f;  
  22.   
  23.     void run(){  
  24.         n=sc.nextInt();  
  25.         m=sc.nextInt();  
  26.         a=new int[n][m];  
  27.         f=new boolean[n][m];  
  28.         for(int j=0; j<n; j++){  
  29.             String s=sc.next();  
  30.             for(int i=0; i<m; i++){  
  31.                 a[j][i]=s.charAt(i)=='.'?0:1;  
  32.             }  
  33.         }  
  34.         int ans=0;  
  35.         for(int j=0; j<n; j++){  
  36.             for(int i=0; i<m; i++){  
  37.                 if(a[j][i]==1&&!f[j][i]){  
  38.                     ans++;  
  39.                     visit(i, j);  
  40.                 }  
  41.             }  
  42.         }  
  43.         println(ans+"");  
  44.     }  
  45.   
  46.     void visit(int x, int y){  
  47.         f[y][x]=true;  
  48.         for(int j=-1; j<=1; j++){  
  49.             int y2=y+j;  
  50.             if(y2<0||y2>=n)  
  51.                 continue;  
  52.             for(int i=-1; i<=1; i++){  
  53.                 int x2=x+i;  
  54.                 if(x2<0||x2>=m)  
  55.                     continue;  
  56.                 if(a[y2][x2]==1&&!f[y2][x2]){  
  57.                     visit(x2, y2);  
  58.                 }  
  59.             }  
  60.         }  
  61.     }  
  62.   
  63.     void print(String s){  
  64.         System.out.print(s);  
  65.     }  
  66.   
  67.     void println(String s){  
  68.         System.out.println(s);  
  69.     }  
  70.   
  71.     public static void main(String[] args){  
  72.         // System.setOut(new PrintStream(new BufferedOutputStream(System.out)));  
  73.         new Main().run();  
  74.     }  
  75. }  

0 件のコメント: