求助(DFS
  • 板块P1141 01迷宫
  • 楼主Gsmdog_H
  • 当前回复6
  • 已保存回复6
  • 发布时间2020/10/15 21:00
  • 上次更新2023/11/5 10:42:05
查看原帖
求助(DFS
313616
Gsmdog_H楼主2020/10/15 21:00

巨蒟

#include<iostream>
#include<cstdio>
using namespace std;

char a[1100][1100];
int n , m;
int ans , zx , zy;
bool flag[1100][1100];
int mi[4][2] = {{0 , 1} , {0 , -1} , {1 , 0} , {-1 , 0}};

void dfs(int x , int y , int sum){
	
	if(x < 1 or x > n or y < 1 or y > n or (x == zx and y == zy and sum != 0))
		return;
	
	ans++;
	
	for(int i = 0; i < 4; ++i){
		int x_ = mi[i][0] , y_ = mi[i][1];
		
		if(a[x + x_][y + y_] != a[x][y] and !flag[x][y])
		{
			flag[x + x_][y + y_] = true;
			
			dfs(x + x_ , y + y_ , sum + 1);
				
			flag[x + x_][y + y_] = false;
		}
	}
	
	return ;
}

int main(){
	
	cin >> n >> m;
	
	for(int i = 1; i <= n ; ++i){
		for(int j = 1; j <= n; ++j){
			cin >> a[i][j];
		}
	}
	
	int x , y;
	for(int i = 1; i <= m; ++i){
		cin >> x >> y;
		
		zx = x , zy = y ;
		
		if(flag[x][y]){
			continue;
		}
		
		dfs(x , y , 0);
		
		printf("%d\n", ans);
	}
	
	return 0;
}
2020/10/15 21:00
加载中...