站外题求助,悬114514关
  • 板块灌水区
  • 楼主__lcm
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/8/16 08:44
  • 上次更新2024/8/16 10:50:00
查看原帖
站外题求助,悬114514关
1370556
__lcm楼主2024/8/16 08:44

题目

题解(可以参考)

我的代码:

#include<bits/stdc++.h>
using namespace std;
const int N=205;
char mp[N][N];
int dx[5]={0,0,-1,1},dy[5]={1,-1,0,0},vis[N][N];
struct node{
	int x,y,k,t;
};
int main(){
	int n,m,k,sx,sy;
	while(cin>>n>>m>>k){
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++){
				cin>>mp[i][j];vis[i][j]=0;
				if(mp[i][j]=='@') sx=i,sy=j;
			}
		queue<node>q;
		q.push(node{sx,sy,k,0});
		vis[sx][sy]=1;
		int f=0;
		while(q.size()){
			node now=q.front();
			q.pop();
			int nowx=now.x,nowy=now.y,nowk=now.k,nowt=now.t;
			for(int i=0;i<4;i++){
				int xx=nowx+dx[i],yy=nowy+dy[i];
				if(vis[xx][yy]) continue;
				if(xx<1||xx>n||yy<1||yy>m) continue;
				if(mp[xx][yy]=='*') 
					vis[xx][yy]=1,q.push(node{xx,yy,nowk,nowt+1});
				else if(mp[xx][yy]=='+'){
					cout<<nowt+1<<endl;
					f=1;
					break;
				}
				else if(mp[xx][yy]=='#')
					if(nowk) vis[xx][yy]=1,q.push(node{xx,yy,nowk-1,nowt+1});
			}
			if(f) break;
		}
		if(!f) cout<<-1<<endl;
	}
	return 0;
}
2024/8/16 08:44
加载中...