数据过小,开 10050*10050 的数组能过。
代码:
#include<bits/stdc++.h>
using namespace std;
int r,c,a,b,ans;
//vector<char> arr[100050];
//vector<char> vis[100050];
char arr[10050][10050];
bool vis[10050][10050];
int dirx[4]={1,-1,0,0};
int diry[4]={0,0,1,-1};
int main()
{
cin>>r>>c;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
// char tmp;
// cin>>tmp;
// arr[i].push_back(tmp);
// vis[i].push_back(0);
cin>>arr[i][j];
}
}
cin>>a>>b;
queue<int> qx,qy;
qx.push(a);qy.push(b);
vis[a][b]=1;
if(arr[a][b]=='S')
{
ans+=1;
}
else if(arr[a][b]=='M')
{
ans+=5;
}
else if(arr[a][b]='L')
{
ans+=10;
}
while(!qx.empty())
{
int topx=qx.front(),topy=qy.front();
qx.pop();qy.pop();
for(int i=0;i<4;i++)
{
int newx=topx+dirx[i],newy=topy+diry[i];
if(!(newx<0 || newx>=r || newy<0 || newy>=c || arr[newx][newy]=='*' || vis[newx][newy]))
{
qx.push(newx);
qy.push(newy);
vis[newx][newy]=1;
if(arr[newx][newy]=='S')
{
ans+=1;
}
else if(arr[newx][newy]=='M')
{
ans+=5;
}
else if(arr[newx][newy]=='L')
{
ans+=10;
}
}
}
}
cout<<ans;
return 0;
}