Submission

Status:

PPPPP

Subtask/Task Score:

100/100

Score: 100

User: kavin8888

Problemset: เดินสลับสี

Language: cpp

Time: 0.002 second

Submitted On: 2025-11-09 20:38:06

#include<bits/stdc++.h>
using namespace std;
int n,ans=0;
vector<string> board;
bool vis[30][30];
bool valid(int x,int y) {
	return 0<=x && x<n && 0<=y && y<n;
}
void dfs(int x,int y) {
	vis[x][y]=true;
	char mark=board[x][y];
	if(!vis[x-1][y] && valid(x-1,y) && board[x-1][y] != mark) {
		dfs(x-1,y);
	}
	if(!vis[x+1][y] && valid(x+1,y) && board[x+1][y] != mark) {
		dfs(x+1,y);
	}
	if(!vis[x][y-1] && valid(x,y-1) && board[x][y-1] != mark) {
		dfs(x,y-1);
	}
	if(!vis[x][y+1] && valid(x,y+1) && board[x][y+1] != mark) {
		dfs(x,y+1);
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cin>>n;
	board.resize(n);
	for(int i=0;i<n;i++) {
		cin>>board[i];
	}
	dfs(0,0);
	for(int i=0;i<n;i++) {
		for(int j=0;j<n;j++) {
			if(vis[i][j]) {
				ans++;
			}
		}
	}
	cout<<ans<<'\n';
	return 0;
}