问一下为什么倒数第三个和最后一个WA
  • 板块P2802 回家
  • 楼主dfxgbm
  • 当前回复6
  • 已保存回复6
  • 发布时间2021/2/25 10:04
  • 上次更新2023/11/5 02:44:16
查看原帖
问一下为什么倒数第三个和最后一个WA
468029
dfxgbm楼主2021/2/25 10:04
#include <cstdio>
#include <algorithm>
#define M 11
using namespace std;
short int g[M][M],dir_x[4]= {-1,1,0,0},dir_y[4]= {0,0,-1,1},n,m;
bool vis[M][M];
int hp=6,steps=0,minstep=99999;
bool exced(int x,int y) {
    return x<1||y<1||x>n||y>m;
}

void solve(int x,int y) {
	if(hp<=0){
    	return;
	}
    if(g[x][y]==4) //恢复血量
        hp=6;
    if(g[x][y]==3){
    	minstep=min(minstep,steps);
    	return;
	}
    for(int i=0; i<4; i++) {
    	int nx=x+dir_x[i],ny=y+dir_y[i];
    	if((!exced(nx,ny))&&(!vis[nx][ny])&&g[nx][ny]!=0){ 
    		hp--;
    		steps++;
    		vis[nx][ny]=true;
    		solve(nx,ny);
    		vis[nx][ny]=false;
    		steps--;
    		hp++;
		}
    }
}

int main() {
    int i,j,x,y;
    scanf("%d%d",&n,&m);
    for(i=1; i<=n; i++) {
        for(j=1; j<=m; j++) {
            scanf("%d",&g[i][j]);
            if(g[i][j]==2) {
                x=i;
                y=j;
            }
        }
    }
    solve(x,y);
    if(minstep!=99999){
    	printf("%d",minstep);
	}
	else
		printf("-1");
    return 0;
}
2021/2/25 10:04
加载中...