题目链接

题目背景:

贝茜遇到了一件很麻烦的事:她无意中闯入了森林里的一座城堡,如果她想回家,就必须穿过这片由骑士们守护着的森林.为了能安全地离开,贝茜不得不按照骑士们的要求,在森林寻找一种特殊的灌木并带一棵给他们.当然,贝茜想早点离开这可怕的森林,于是她必须尽快完成骑士们给的任务,贝茜随身带着这片森林的地图,地图上的森林被放入了直角坐标系,并按x,y轴上的单位长度划分成了W×H(1≤W,H≤1000)块,贝茜在地图上查出了她自己以及骑士们所在的位置,当然地图上也标注了她所需要的灌木生长的区域.某些区域是不能通过的(比如说沼泽地,悬崖,以及食人兔的聚居地).在没有找到灌木之前,贝茜不能通过骑士们所在的那个区域,为了确保她自己不会迷路,贝茜只向正北、正东、正南、正西四个方向移动(注意,她不会走对角线).她要走整整一天,才能从某块区域走到与它相邻的那块区域.    输入数据保证贝茜一定能完成骑士的任务.贝茜希望你能帮她计算一下,她最少需要多少天才可脱离这可怕的地方?

题目大意:

一个w*h的矩阵,有不能到达的点,从起点经过多个中间点其中的一个然后到达终点的最短路

注意事项:

只有一个起点和一个终点,也就是说"骑士们"其实只有一个

题解:

我看其他的博客有用两遍dfs然后遍历所有点相加的。。。

然而当时我都写完代码了,正在调,感觉那个方法好机智啊qwq

我是正常跑spfa,然后维护最短路的数组开两维,一个是捡到灌木之前的,一个是之后的

具体看代码吧

#include<iostream>
#include<cstdio>
#include<queue>#define inf 10000000using namespace std;struct point{int x,y;friend bool operator == (point a,point b){if(a.x==b.x && a.y==b.y)return true;else return false;}
};struct node{bool guan;point now;int num;friend bool operator < (node a,node b){return a.num>b.num;}
};int tox[4]={-1,0,1,0};
int toy[4]={0,1,0,-1};
point s,t;
int n,m;
int a[1010][1010];
int Min[1010][1010][2];
priority_queue<node>q;int main(){scanf("%d%d",&m,&n);for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){scanf("%d",&a[i][j]);if(a[i][j]==2)s.x=i,s.y=j;if(a[i][j]==3)t.x=i,t.y=j;Min[i][j][0]=Min[i][j][1]=inf;}}node tt;tt.guan=false;tt.now=s;Min[s.x][s.y][0]=0;tt.num=0;q.push(tt);while(!q.empty()){tt=q.top();q.pop();if(tt.guan && tt.now==t){break;}for(int i=0; i<4; i++){node t1=tt;t1.now.x+=tox[i];t1.now.y+=toy[i];if(t1.now.x<1 || t1.now.x>n || t1.now.y<1 || t1.now.y>m)continue;if(a[t1.now.x][t1.now.y]==1)continue;if(Min[t1.now.x][t1.now.y][t1.guan]<=t1.num+1)continue;Min[t1.now.x][t1.now.y][t1.guan]=t1.num+1;if(t1.guan==false && a[t1.now.x][t1.now.y]==4){t1.guan=true;Min[t1.now.x][t1.now.y][t1.guan]=Min[t1.now.x][t1.now.y][0];}t1.num++;q.push(t1);}}printf("%d\n",tt.num);return 0;
}

bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士相关推荐

  1. bzoj 1671: [Usaco2005 Dec]Knights of Ni 骑士(BFS)

    1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 416  Solved: 26 ...

  2. 1671: [Usaco2005 Dec]Knights of Ni 骑士

    1671: [Usaco2005 Dec]Knights of Ni 骑士 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 351  Solved: 22 ...

  3. [题解] Knights of Ni 骑士 C++

    Knights of Ni 骑士 题目 Description Input Output Sample Input Sample Output 思路 代码 题目 Description 给出一张W*H ...

  4. bzoj 1673: [Usaco2005 Dec]Scales 天平(DFS)

    1673: [Usaco2005 Dec]Scales 天平 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 695  Solved: 253 [Subm ...

  5. bzoj 1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚(DP)

    1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 941  Solved ...

  6. bzoj1671 Knights of Ni 骑士 BFS

    Description 贝茜遇到了一件很麻烦的事:她无意中闯入了森林里的一座城堡,如果她想回家,就必须穿过这片由骑士们守护着的森林.为了能安全地离开,贝茜不得不按照骑士们的要求,在森林寻找一种特殊的灌 ...

  7. bzoj 1731 [Usaco2005 dec]Layout 排队布局——差分约束

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1731 对差分约束理解更深.还发现美妙博客:http://www.cppblog.com/me ...

  8. bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】

    差分约束裸题,用了比较蠢的方法,先dfs_spfa判负环,再bfs_spfa跑最短路 注意到"奶牛排在队伍中的顺序和它们的编号是相同的",所以\( d_i-d_{i-1}>= ...

  9. BZOJ 1673 [Usaco2005 Dec]Scales 天平:dfs 启发式搜索 A*搜索

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1673 题意: 有n个砝码(n <= 1000),重量为w[i]. 你要从中选择一些砝 ...

最新文章

  1. Vuforia 6.1提供4个版本下载
  2. hadoop3.0 分布式搭建/安装
  3. 设计模式系列之七大原则之——迪米特法则
  4. 【渝粤题库】陕西师范大学180113 学前儿童艺术教育作业
  5. c/c++教程 - 2.4.2.5 深拷贝和浅拷贝,堆区内存重复释放
  6. ICollection IEnumerable/IEnumerator IDictionaryEnumerator yield
  7. 《CCNP ROUTE 300-101认证考试指南》——2.10节 复习所有考试要点
  8. guide, manual, tutorial之间的区别
  9. 上海野生动物园一日游
  10. [杜撰的故事]那天以后
  11. longhorn介绍
  12. android通知栏设置,android系统通知栏提示消息
  13. JavaScript深入浅出(进阶)
  14. 手机端 html5 按长按保存图片尺寸,html5移动端禁止长按图片保存的实现
  15. lcd屏和amoled屏的优缺点 lcd屏和amoled屏哪个效果好
  16. 青岛企业掘金大数据时代 大数据时代已经来临
  17. 亚马逊测评地址有哪些风险?账号网络需要注意
  18. 谷粒商城项目8——商品上架 上架商品sku保存到es nginx配置
  19. Linux进程同步之POSIX信号量
  20. ctfshow---vip限免题目1~10关

热门文章

  1. java随堂练习04,猜字游戏猜1-6的数字猜大小和豹子。
  2. 36. OP-TEE中secure stroage的使用
  3. 按照日期排序相册库(支持自定义选中图片,视频数量,支持预览,支持拍摄仿小米原生相册)
  4. 09 七段-复利:营造长期的局部垄断
  5. 有时间 多研究研究开源项目 必有收获
  6. Python初体验:三句话写个刷微博、博客、空间等的小爬虫
  7. istio-jaeger部署
  8. 股市大跌对于IT行业的我们应该如何应对!2020年Android开发的未来发展方向该如何走?
  9. 90后最担心的事情不是猝死而是脱发!赋强教你防脱发!
  10. HTML爱心网页制作(带文字)