Submission

Status:
PPPPPPPP

Score: 100

User: Monasm

Problemset: Sirabyrinth 3

Language: cpp

Time: 0.002 second

Submitted On: 2024-12-13 18:23:05

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

char tb[105][105];
int dist[105][105];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
int main()
{
	int N,M;
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;i++)
		scanf("%s",tb[i]+1);
	
	int x,y;
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
		{
			if(tb[i][j]=='S')
			{
				x=i,y=j;
			}
			
			dist[i][j]=100000;
		}
	int ans=100000;
	
	priority_queue<pair<int,pair<int,int>>> pq;
	/// dist (x,y)
	
	pq.push({0,{x,y}});
	dist[x][y]=0;

	while(!pq.empty())
	{
		x=pq.top().second.first;
		y=pq.top().second.second;
		int k=-pq.top().first;
		pq.pop();
		
		for(int i=0;i<4;i++)
		{
			int nx=x+dx[i];
			int ny=y+dy[i];
			int d =k+(tb[nx][ny]=='#');
			if(d<dist[nx][ny])
			{
				pq.push({-d,{nx,ny}});
				dist[nx][ny]=d;
			}
		}
	}
/*
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=M;j++)
			printf("%d ",dist[i][j]);
		printf("\n");
	}
//*/
	for(int j=1;j<=M;j++)
	{
		ans=min(ans,dist[1][j]);
		ans=min(ans,dist[N][j]);
	}
	for(int i=1;i<=N;i++)
	{
		ans=min(ans,dist[i][1]);
		ans=min(ans,dist[i][M]);		
	}
	printf("%d\n",ans);
}