Submission

Status:

[P-SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS]

Subtask/Task Score:

{0/100}

Score: 0

User: boomm

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

Language: cpp

Time: 0.002 second

Submitted On: 2026-03-12 21:47:17

#include<bits/stdc++.h>
using namespace std;

void dfs(int x,int y,int n,int m,vector<vector<int> >& v){
	int dx[8]={0,0,-1,-1,-1,1,1,1};
	int dy[8]={-1,1,-1,0,1,-1,0,1};
	for(int i=0;i<8;i++){
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(nx>=0 && ny>=0 && nx<n && ny<m){
			v[nx][ny]=0;
		}
	}
}
int main(){
	int n,m;
	cin >> n >> m;
	int dx[4]={0,0,-1,1};
	int dy[4]={-1,1,0,0};
	vector<vector<int> > v(n,vector<int>(m));
	for(int i=0;i<n;i++){ 
		for(int j=0;j<m;j++){
			cin >> v[i][j];
		}
	}
	for(int i=0;i<n;i++){ 
		for(int j=0;j<m;j++){
			if(v[i][j]==0) dfs(i,j,n,m,v);
		}
	}
	queue<pair<int,int> > q;
	vector<vector<bool> > ch(n,vector<bool>(m,false));
	for (int i = 0; i < n; i++) {
        if (v[i][0]!=0){
        	ch[i][0]=true;
            q.push({i,0});
        }
    }
	int mn=1e9;
	int c=1;
	
	while(!q.empty()){
		int z=q.size();
		while(z--){
			int x=q.front().first;
			int y=q.front().second;
			q.pop();
			if(y==m-1){
				mn=min(mn,c);
				break;
			}
			for(int k=0;k<4;k++){
				int nx=x+dx[k];
				int ny=y+dy[k];
				if(nx>=0 && ny>=0 && nx<n && ny<m && !ch[nx][ny] && v[nx][ny]==1){
					ch[nx][ny]=true;
					q.push({nx,ny});
				}
			}
		}
		c++;
	}
	if(mn==1e9) cout << "-1";
	else cout << mn;

	return 0;
}