View Code of Problem 62

#include "stdio.h"
#include "stdlib.h"

#define MAXNUM 125

char pic[MAXNUM][MAXNUM] ;
int m , n ,idx[MAXNUM][MAXNUM] ;

void dfs(int r , int c , int id)
{
	int dr , dc ;
	if( r < 0 || r>= m || c< 0 || c >= n) return ;
	if(idx[r][c] > 0 || pic[r][c] != '1') return ;
	idx[r][c] = id ;
	
	for( dr = -1 ; dr <=1 ; dr++)
		for( dc = -1 ; dc <= 1 ; dc++)
			if( dr != 0 || dc != 0 )dfs(r+ dr , c+dc , id ) ;
}

int main(void)
{
	int cnt =0 , i = 0 , j = 0;
	while( scanf("%d %d" , &m , &n) == 2 && m && n)
	{
		int cnt = 0 ;
		for( i =0 ; i <m ;i ++) scanf("%s" , pic[i]);
		memset(idx , 0 , sizeof(idx)) ;
		
		for( i =0 ; i <m ; i++ )
			for( j =0 ; j < n ; j++)
				if( idx[i][j] == 0 && pic[i][j] == '1') dfs(i , j , ++ cnt) ;

		printf("%d" , cnt);
	}
	return 0 ;
}

Double click to view unformatted code.


Back to problem 62