Always keep a beginner's mi|

Tobaa

园龄:1年1个月粉丝:1关注:1

[ABC311D] Grid Ice Floor

前言:题解看不懂,太高深了(我太蒻了),于是自己写了一篇。


思路: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;
}

尼堪尼玛

本文作者:Tobaa

本文链接:https://www.cnblogs.com/TobyL/p/18665272

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Tobaa  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起