为啥只有36分,大佬帮忙看一下
  • 板块P2802 回家
  • 楼主小超手123
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/15 16:00
  • 上次更新2023/11/4 10:35:14
查看原帖
为啥只有36分,大佬帮忙看一下
490978
小超手123楼主2021/8/15 16:00
#include<bits/stdc++.h>
using namespace std;
int n,m,sx,sy,t=0,minn=1<<30,HP=6;
int a[100][100],vis[100][100];
int next[4][2]={{-1,0},{0,1},{0,-1},{1,0}};
bool f=false;
void dfs(int x,int y){
	if(HP==0)return; //死亡则返回上一步 
	if(a[x][y]==3){  //如果回到家 
		f=true;
		if(t<minn)minn=t; //记录最短时间 
		return;
	}
	if(a[x][y]==4){ //捡血包 
		HP=6;
	}
	for(int i=0;i<4;i++){
		int dx=x+next[i][0],dy=y+next[i][1];
		if(a[dx][dy]&&dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]){
			HP--;
			vis[dx][dy]=1;
			dfs(dx,dy);
			HP++;
			vis[dx][dy]=0;
		}
	}
}
int main() {
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=m;j++){
	    	cin>>a[i][j];
	    	if(a[i][j]=='2'){ //记录起点 
	    	    vis[i][j]=1;
	    	    sx=i,sy=j;
			}
		}
	dfs(sx,sy); //从起点开始遍历 
	if(f)cout<<minn;
	else cout<<-1;
    return 0; 
}
2021/8/15 16:00
加载中...