1 条题解
-
0
自动搬运
来自洛谷,原作者为

wonSSnow
啊,这!搬运于
2025-08-24 21:23:31,当前版本为作者最后更新于2018-10-31 18:58:46,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这道题在蒟蒻看来就是bfs的模板,但是还是有一个坑点。
主要是visit数组,本蒟蒻在10分卡了很久,就是因为visit数组没有开三维。
v[i][j][way]表示第i行第j列是其他点走way这个方向走来的。
还有v数组应保存从任一点走到这里的最小步数。
请大家看我题解中c++代码中最短的一篇
CODE:
#include<bits/stdc++.h> using namespace std; int mapa[105][105]; int v[105][105][10]; int dx[9]={0,0,1,1,1,0,-1,-1,-1}; int dy[9]={0,-1,-1,0,1,1,1,0,-1}; struct node{ int x,y,step,way; }; queue<node> q; int main() { int n,m; memset(v,0,sizeof(v)); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&mapa[i][j]); node start; start.x=1,start.y=1; start.step=0,start.way=9; q.push(start); while(!q.empty()) { node now=q.front(); q.pop(); if(now.x==m&&now.y==n) { printf("%d",now.step); return 0; } for(int i=1;i<=8;i++) { if(now.way!=i) { int tx=now.x+dx[i]*mapa[now.x][now.y]; int ty=now.y+dy[i]*mapa[now.x][now.y]; int ts=now.step; if(tx<=m&&ty<=n&&tx>=1&&ty>=1&&v[tx][ty][i]==0) { v[tx][ty][i]=1; node ans; ans.x=tx,ans.y=ty; ans.step=ts+1,ans.way=i; q.push(ans); } } } } printf("NEVER"); }在此,特别鸣谢jackyzhu教蒟蒻做题。
- 1
信息
- ID
- 300
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者