DFS連通ブロックを求める問題

1546 ワード

四連通ブロック(上、下、左、右)を求めます
#include
#include
#define maxn 105 //        
int map[maxn][maxn]; //     
int visited[maxn][maxn]; //    
int move[8]= {0,1,
              1,0,
              0,-1,
              -1,0
             };  //move           
int m,n;
void dfs(int r,int c)
{
	if(r<0||r>=m||c<0||c>=n)
		return;
	if(visited[r][c]==1||map[r][c]==0)
		return;
	visited[r][c]=1;
  //       
	for(int i=0; i<=8; i=i+2)
	{
		dfs(r+move[i],c+move[i+1]);
	}

}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d %d",&m,&n);
		int count=0;
		memset(map,0,sizeof(map));
		memset(visited,0,sizeof(visited));
		for(int i=0; i

8連通のブロック(上、下、左、右、左上、右上、左下、右下)を求めます
#include
#include
#define maxn 105 //     
int map[maxn][maxn]; //     
int visited[maxn][maxn]; //    
int m,n;
void dfs(int r,int c)
{
	if(r<0||r>=m||c<0||c>=n)
		return;
	if(visited[r][c]==1||map[r][c]==0)
		return;
	visited[r][c]=1;
  //       
for(int dr=-1;dr<=1;dr++)
{
	for(int dc=-1;dc<=1;dc++)
	{
		if(dr!=0||dc!=0)
		dfs(r+dr,c+dc);
	}
}

}

int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d %d",&m,&n);
		int count=0;
		memset(map,0,sizeof(map));
		memset(visited,0,sizeof(visited));
		for(int i=0; i