前言:题解看不懂,太高深了(我太蒻了),于是自己写了一篇。
思路:bfs 大法,记录新的单次滑倒的中点(撞石头),并记录经过的点,总之还是很简单的。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N=210;
int n,m;
int vis[N][N],cnt[N][N];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
char mp[N][N];
struct State{int x,y;};
void bfs(){
vis[1][1]=1;
cnt[1][1]=1;
queue<State> st;
st.push({1,1});
while(!st.empty()){
for(int i=0;i<4;i++){
int nx=st.front().x;
int ny=st.front().y;
while(mp[nx+dx[i]][ny+dy[i]]=='.'){
nx+=dx[i],ny+=dy[i];
cnt[nx][ny]=1;
}
if(vis[nx][ny]==0){
st.push({nx,ny});
vis[nx][ny]=1;
}
else continue;
}
st.pop();
}
return ;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) cin>>mp[i][j];
}
bfs();
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(cnt[i][j]==1)ans++;
}
cout<<ans;
return 0;
}
尼堪尼玛
标签:Floor,int,Ice,st,bfs,vis,Grid,ABC311D From: https://www.cnblogs.com/TobyL/p/18665272