Submission

Status:

[PPPPPPPP-SSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: VggT

Problemset: ย่องเบาหลบกับระเบิด

Language: cpp

Time: 0.245 second

Submitted On: 2026-03-12 21:11:55

#include <bits/stdc++.h>
using namespace std;
void changeBoard(vector<vector<int>> &grid, int posi, int posj)
{
	for(int i = posi-1; i <= posi+1; i+=1)
	{
		for(int j = posj-1; j <= posj+1; j+=1)
		{
			if(i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size()) continue;
			grid[i][j] = 0;
		}
	}
}

void path(vector<vector<int>> &grid,int i, int j, int &minimum,int count,vector<vector<bool>> &visited)
{
	if(i < 0 || j < 0 || i >= grid.size() || j >= grid[0].size() || grid[i][j] == 0 || visited[i][j]) return;
	if(j == grid[0].size()-1)
	{
//		cout << count << '\n';
		minimum = min(minimum,count);
		return;
	}
	
	visited[i][j] = true;
	
	path(grid,i,j+1,minimum,count+1,visited);
	path(grid,i+1,j,minimum,count+1,visited);
	path(grid,i-1,j,minimum,count+1,visited);
	
	
	
}

int main()
{
	int n, m; cin >> n >> m;
	vector<vector<int>> grid(n,vector<int>(m));
	for(auto &a : grid) for(auto &b : a) cin >> b;
	
	vector<vector<int>> gridcopy = grid;
	
	for(int i = 0; i < grid.size(); i+=1)
	{
		for(int j = 0; j < grid[0].size(); j+=1)
		{
			if(grid[i][j] == 0)
			{
				changeBoard(gridcopy,i,j);
			}
		}
	}
	
	
	grid = gridcopy;
	
	int minimum = INT_MAX;
	
	for(int i = 0; i < grid.size(); i+=1)
	{
		vector<vector<bool>> visited(n,vector<bool>(m,false));
		path(grid,i,0,minimum,1,visited);
	}
	
	
	
	if(minimum == INT_MAX) cout << -1;
	else cout << minimum;

//	cout << '\n';
//	
//	for(auto a : grid)
//	{
//		for(auto b : a)
//		{
//			cout << b << ' ';
//		}
//		cout << '\n';
//	}
	
	
	
	
	
	
	return 0;
}