社区讨论
求救 求救
P2802回家参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6m46pf
- 此快照首次捕获于
- 2025/11/20 07:07 4 个月前
- 此快照最后确认于
- 2025/11/20 07:07 4 个月前
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
int const maxn=100;
int vis[maxn][maxn];
int map[maxn][maxn];
int a[500][5];//当前位置 一维 第几步 ;二维 1:行 2:列
int blood=6;
int dx[8]={0,-1,+1,0,0};
int dy[8]={0,0,0,-1,+1};
int mini=1000;
void dfs(int step)
{
int x=a[step-1][1];//前一 "步" 的位置 即 当前位置
int y=a[step-1][2];
if(map[x][y] == 3 && blood>=1)
{
mini=min(mini,step-1);
return ;
} //到达目的地
for(int i=1;i<=4;i++)
{
int xx=x+dx[i]; //下一步的位置 即 将要走的一步
int yy=y+dy[i];
if(vis[xx][yy]==0 && map[xx][yy]!=0 && xx<=n && xx>=1 && yy<=m && yy>=1 && blood>=2)//当前的血量
{
a[step][1]=xx;
a[step][2]=yy;
blood--;
if(map[xx][yy]==4) blood=6;
vis[xx][yy]=1;
dfs(step+1);
vis[xx][yy]=0;
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>map[i][j];
if(map[i][j] == 2)
{
a[0][1]=i;
a[0][2]=j;
}
}
dfs(1);
if(mini == 1000)
cout<<-1;
else
cout<<mini;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...