#UVa:352-The Seasonal War

灆洢 2015-05-22 10:10:47

利用DFS將一塊相連區塊的1找出來,並算總共有幾塊即可。

C++(0.012)

/*******************************************************/
/* UVa 352 The Seasonal War                            */
/* Author: Maplewing [at] knightzone.studio            */
/* Version: 2015/05/22                                 */
/*******************************************************/
#include <iostream>
#include <cstdio>
using namespace std;

void marked(char map[30][30], bool isVisited[30][30], int i, int j){
  if( map[i][j] != '1' || isVisited[i][j] ) return;

  const static int direction[8][2] = { {1, 0}, {-1, 0}, 
                                     {0, 1}, {0, -1},
                                     {1, 1}, {-1, -1},
                                     {-1, 1}, {1, -1}};
  isVisited[i][j] = true;

  for( int d = 0 ; d < 8 ; ++d ){
    marked(map, isVisited, i + direction[d][0], j + direction[d][1]); 
  }
}

int main(){
  int n;
  int imageNumber = 0;
  while( scanf("%d", &n) != EOF ){
    char map[30][30] = {0};
    for( int i = 1 ; i <= n ; ++i ){
      scanf("%s", &map[i][1]);
    }

    int warCount = 0;
    bool isVisited[30][30] = {false};
    for( int i = 1 ; i <= n ; ++i ){
      for( int j = 1 ; j <= n ; ++j ){
        if( map[i][j] == '1' && !isVisited[i][j] ){
          marked(map, isVisited, i, j);
          ++warCount;
        }
      }
    }

    printf("Image number %d contains %d war eagles.\n", ++imageNumber, warCount);
  }


  return 0;
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料