72分求助
  • 板块P2802 回家
  • 楼主xjy0820
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/6/15 20:59
  • 上次更新2023/10/27 23:15:14
查看原帖
72分求助
516247
xjy0820楼主2022/6/15 20:59

代码如下

#include<bits/stdc++.h>
using namespace std;
int s[15][15];
int vis[15][15];
int r,c,r2,c2,ans=100110;
int n,m;
int d[4][2]= {{-1,0},{1,0},{0,-1},{0,1}};
void dfs(int x,int y,int hp,int t) {
	//cout<<x<<" "<<y<<" "<<hp<<" "<<t<<endl;
	if(x==r&&y==c&&hp>1) {
		ans=min(ans,t);
		return;
	}
	if(hp==0||t>n*m||t>ans){
		return;
	}
	if(s[x][y]==4){
		hp=6;
	}
	int xx,yy;
	for(int i=0; i<4; i++) {
		xx=x+d[i][0];
		yy=y+d[i][1];
		if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&hp>1&&s[xx][yy]!=0&&vis[xx][yy]==0) {
			vis[xx][yy]=1;
			dfs(xx,yy,hp-1,t+1);
			vis[xx][yy]=0;
		}
	}
}
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			cin>>s[i][j];
		}
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=m; j++) {
			if(s[i][j]==3) {
				r=i;
				c=j;
				//cout<<i<<" "<<j<<endl;
			}
			if(s[i][j]==2) {
				r2=i;
				c2=j;
				//cout<<i<<" "<<j<<endl;
			}
		}
	}
	dfs(r2,c2,6,0);
	if(ans==100110){
		cout<<"-1"<<endl;
		return 0;
	}
	cout<<ans<<endl;
	return 0;
}
2022/6/15 20:59
加载中...