bfs88分求助
  • 板块P2802 回家
  • 楼主_Ventus_
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/1/29 21:25
  • 上次更新2023/10/28 10:06:32
查看原帖
bfs88分求助
506225
_Ventus_楼主2022/1/29 21:25
#include<bits/stdc++.h>
using namespace std;
int tx,ty,lx,ly,n,m,t,hp=6,ans=1e8;
int ma[11][11],dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void dfs(int x,int y,int hp){
	if(hp==0||t>m*n||t>ans) return;
	if(ma[x][y]==4) hp=6;
    if(x==lx&&y==ly) ans=min(t,ans);
    else{
        for(int i=0;i<4;i++){
            tx=x+dir[i][0],ty=y+dir[i][1];
            if(tx<=0||tx>n||ty<=0||ty>m||ma[tx][ty]==0) continue;
            ++t;
            dfs(tx,ty,hp-1);
			--t;
        }
    }
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>ma[i][j];
            if(ma[i][j]==2) tx=i,ty=j; 
            if(ma[i][j]==3) lx=i,ly=j;
        }
    }
    dfs(tx,ty,hp);
    if(ans!=1e8) cout<<ans;
    else cout<<-1;
    return 0;
}

第1个点TLE,救救孩子吧!

2022/1/29 21:25
加载中...