Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdio>
- #include <vector>
- #include <cctype>
- using namespace std;
- #define MAX 1000
- typedef pair < int , int > pii ;
- char map[MAX][MAX] ;
- int fam[MAX][MAX] ;
- int C , R ;
- int row[] = { -1 , 1 , 0 , 0 , 1 , -1 , -1 , 1 } ;
- int col[] = { 0 , 0 , -1 , 1 , 1 , 1 , -1 , -1 } ;
- void init(int r , int c ){ for ( int i = 0 ; i < r ; i++ ) for ( int j = 0 ; j < c ; j++ ) fam[i][j] = 0 ; }
- bool is_valid( int r , int c ) { if ( r >= 0 && r <= R && c >= 0 && c <= C ) return true ; return false ; }
- void dfs ( pii s , int monkey )
- {
- int r = s.first , c = s.second ;
- fam[r][c] = monkey ;
- for ( int i = 0 ; i < 8 ; i++ )
- if ( is_valid ( r + row[i] , c + col[i] ) && map[r][c] == map[r + row[i]][c + col[i]] )
- if( fam[r + row[i]][c + col[i]] == 0 )
- dfs ( pii ( r + row[i] , c + col[i] ) , monkey ) ;
- }
- int main ()
- {
- //freopen ( "in.txt" , "r" , stdin ) ;
- char S[MAX] ;
- int i = 0 , j , k , per = 0 , monkey ;
- while ( gets(S) )
- {
- i = 0 ;
- for ( j = 0 , k = 0 ; S[j] ; j++ ) if ( S[j] != ' ' ) map[i][k++] = S[j] ;
- i++ ;
- while ( true )
- {
- if ( gets(S) == NULL || S[0] == '%' ){ R = i ; i = 0 ; break ; }
- for ( j = 0 , k = 0 ; S[j] ; j++ ) if ( isalpha ( S[j] ) ) map[i][k++] = S[j] ;
- C = k ; i++ ;
- }
- monkey = 1 ;
- init ( R , C ) ;
- for ( i = 0 ; i < R ; i++ )
- for ( j = 0 ; j < C ; j++ )
- {
- if ( !fam[i][j] )
- dfs ( pii ( i , j ) , monkey++ ) ;
- }
- int per[MAX] ;
- for ( j = 0 ; j < C ; j++ )
- {
- int max = fam[0][j] ;
- for ( i = 1 ; i < R ; i++ ) if ( max < fam[i][j] ) max = fam[i][j] ;
- sprintf ( S , "%d" , max );
- per[j] = strlen ( S ) ;
- }
- for ( i = 0 ; i < R ; i++ )
- {
- printf ( "%*d" , per[0] , fam[i][0] ) ;
- for ( j = 1 ; j < C ; j++ ) printf ( "%*d" , per[j]+1 , fam[i][j] ) ;
- cout << endl ;
- }
- cout << '%' << endl ;
- }
- return 0 ;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement