81分求解
  • 板块P2802 回家
  • 楼主Almond7216
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/3/8 21:30
  • 上次更新2023/11/5 02:17:22
查看原帖
81分求解
309392
Almond7216楼主2021/3/8 21:30

以下为代码,9和11点错

#include<bits/stdc++.h>
using namespace std;
int a[10][10],vis[10][10],n,m,ans=1e8,hp=6;
int dx[]={0,-1,0,0,1},dy[]={0,0,-1,1,0};
void dfs(int x,int y,int s){
	if(!hp) return;
	if(a[x][y]==3){
		ans=min(ans,s);
		return;
	}
	//if(hp==1&&a[x][y]!=4) return;
	if(s>=ans&&ans>0) return;
	if(x<1||x>n||y<1||y>m||vis[x][y]) return;
	vis[x][y]=1;
	hp--;
	//if(!hp) return;
	if(a[x][y]==4) hp=6;
	for(int i=1;i<=4;i++) dfs(x+dx[i],y+dy[i],s+1);
	hp++;
	vis[x][y]=0;
	return;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j];
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
		if(!a[i][j]) vis[i][j]=1;
	}
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){
		if(a[i][j]==2) dfs(i,j,0);
	}
	if(ans==1e8) cout<<-1;
	else cout<<ans;
	return 0;
}
2021/3/8 21:30
加载中...