就过了一个点,求助!!!
  • 板块P2802 回家
  • 楼主傻肥狍子
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/4/4 22:38
  • 上次更新2023/11/5 01:01:53
查看原帖
就过了一个点,求助!!!
423006
傻肥狍子楼主2021/4/4 22:38
#include <bits/stdc++.h>
using namespace std;
int maps[9][9],v[9][9];
int sx,sy,step,ans=100;
int n,m;  //地图大小 n行m列
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};   //向上,右,下,左 
/*
数字0 		障碍物 
数字1		空地 
数字2		出发点 
数字3		终点 
数字4 		加血包 
*/ 
bool in(int x,int y)
{
	return x>=1&&x<=m&&y>=1&&y<=n;
}
void dfs(int x,int y,int xie)
{
	if(xie==0){
		return;
	} 
	if(maps[x][y]==3){
		ans=min(step,ans);
		return;
	}
	if(maps[x][y]==4){
		xie=6;
	}
	for(int i=0; i<4; i++){
		int ddx=x+dx[i];
		int ddy=y+dy[i];
		if(!v[ddx][ddy]&&maps[ddx][ddy]!=0&&in(ddx,ddy)){
			step++;
			v[ddx][ddy]=1;
			dfs(ddx,ddy,xie-1);
			step--;
			v[ddx][ddy]=0;
		}
	}
 } 
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++){
			scanf("%d",&maps[i][j]);
			if(maps[i][j]==2){
				sx=i,sy=j;
			}
		}
	}
	dfs(sx,sy,6);
	if(ans==0) printf("-1");
	else printf("%d",ans);
	return 0;
 } 
2021/4/4 22:38
加载中...