题干:

n*m矩阵a.若a[i][j]==1则可以往左右走,若a[i][j]==0 则可以往上下走.
每一秒可以按上述规则移动,并且每秒钟矩阵所有的值翻转。
n*m<=1e5.问从(sx,sy)到(tx,ty)的最短时间.

解题报告:

这题因为不带权值所以不需要考虑Dijkstra,可以根据时间直接判断状态是0还是1。如果状态的变换很复杂的话就考虑分层图就好了。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
const int MAX = 3e5 + 5;
int n,m;
bool vis[MAX][2];
int nx[4] = {-1,1,0,0};//上,下,左,右
int ny[4] = {0,0,-1,1}; int sta[MAX];
struct Node {int x,y;int pos,t;Node(){}Node(int x,int y,int pos,int t):x(x),y(y),pos(pos),t(t){}
};
inline int getp(int x,int y) {return (x-1) * m + y;
}
int bfs(int a,int b,int c,int d,int st,int ed) {queue<Node > q;q.push(Node(a,b,st,0));vis[st][sta[st]]=1;while(!q.empty()) {Node cur = q.front();q.pop();if(cur.pos == ed) return cur.t;int nowsta = (cur.t%2==0) ? sta[cur.pos] : 1-sta[cur.pos];if(nowsta == 0) {for(int k = 0; k<2; k++) {int tx = cur.x + nx[k];int ty = cur.y + ny[k];if(tx <1 || tx >n || ty < 1 || ty > m) continue;if(vis[getp(tx,ty)][nowsta]) continue;vis[getp(tx,ty)][nowsta] = 1 ;q.push(Node(tx,ty,getp(tx,ty),cur.t+1));}}else {for(int k = 2; k<4; k++) {int tx = cur.x + nx[k];int ty = cur.y + ny[k];if(tx <1 || tx >n || ty < 1 || ty > m) continue;if(vis[getp(tx,ty)][nowsta]) continue;vis[getp(tx,ty)][nowsta] = 1 ;q.push(Node(tx,ty,getp(tx,ty),cur.t+1));}}}return -1;
}
int main()
{int t;cin>>t;while(t--) {scanf("%d%d",&n,&m);for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {vis[(i-1)*m+j][0]=0;vis[(i-1)*m+j][1]=0;}}for(int i = 1; i<=n; i++) {for(int j = 1; j<=m; j++) {scanf("%d",&sta[(i-1)*m + j]);}}int stx,sty,edx,edy,st,ed;scanf("%d%d",&stx,&sty);scanf("%d%d",&edx,&edy);st = (stx-1) * m + sty;ed = (edx-1) * m + edy;int ans = bfs(stx,sty,edx,edy,st,ed);printf("%d\n",ans);}return 0 ;
}

【ZOJ - 4020 】Traffic Light (bfs,分层图)相关推荐

  1. ZOJ 4020 Traffic Lights BFS

    题意:n*m矩阵a.若a[i][j]==1则可以往左右走,若a[i][j]==0 则可以往上下走. 每一秒可以按上述规则移动,并且每秒钟矩阵所有的值翻转. n*m<=1e5.问从(sx,sy)到 ...

  2. Traffic light control using deep policy-gradient and value-function-based reinforcement learning

     ISSN 1751-956X 作者:Seyed Sajad Mousavi1 , Michael Schukat1, Enda Howley 黄生词 蓝牛句 绿公式 红生涩 Abstract: Re ...

  3. 洛谷4400 BlueMary的旅行(分层图+最大流)

    qwq 首先,我们观察到题目中提到的每天只能乘坐一次航班的限制,很容易想到建分层图,也就是通过枚举天数,然后每天加入一层新的点. (然而我一开始想的却是erf) 考虑从小到大枚举天数,然后每次新建一层 ...

  4. 【牛客 - 370B】Rinne Loves Graph(分层图最短路 或 最短路dp)

    题干: Island 发生了一场暴乱!现在 Rinne 要和 Setsuna 立马到地上世界去. 众所周知:Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路 ...

  5. 洛谷 P1073 最优贸易 (分层图状态转移+SPFA,求最长路径;另附某dalao的超短代码:暴力+动规)

    题目链接1 题目链接2 另附某dalao的超短代码:暴力+动规 P1073 最优贸易 题目描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市. 任意两个城市之间最多只有 ...

  6. 【算法练习】CodeVs1391 伊吹萃香(分层图最短路)

    题意 在幻想乡,伊吹萃香是能够控制物体密度的鬼王.因为能够控制密度,所以萃香能够制造白洞和黑洞,并可以随时改变它们.某一天萃香闲着无聊,在妖怪之山上设置了一些白洞或黑洞,由于引力的影响,给妖怪们带来了 ...

  7. 读书笔记-Coordinated Deep Reinforcement Learners for Traffic Light Control

    Coordinated Deep Reinforcement Learners for Traffic Light Control 本文研究了交通灯的学习控制策略.在交通灯控制问题引入了一种新的奖励函 ...

  8. [图论]分层图最短路

    ABC132 – E – Hopscotch Addict https://atcoder.jp/contests/abc132/tasks/abc132_e 分层图的思想很重要. 这题算比较简单的, ...

  9. 图论 ---- E. Minimum Path(分层图最短路 用分层图对边权操作进行选择)

    题目链接 题目大意: 两点间最短路的定义变成:所有的边之和−max+min所有的边之和-max+min所有的边之和−max+min 解题思路: 这里很明显就是变成了最短路的时时候就是把路径上边权最小值 ...

最新文章

  1. python 回溯法 子集树模板 系列 —— 3、0-1背包问题
  2. CodeForces - 985F Isomorphic Strings
  3. 【APICloud系列|27】 UICalendar模块(日历)的实现
  4. 一步步编写操作系统 49 加载内核2
  5. gRPC服务注册发现及负载均衡的实现方案与源码解析
  6. 【英语学习】【Level 08】U04 What I love L6 Information overload
  7. Soul回应赴美上市传闻:不是约会软件 没有确定的上市计划
  8. java 不能用 random,关于Java中Random的一些使用细节
  9. WIN7 VMware Ubuntu虚拟机连接secureCRT及ftp传输文件
  10. Vue基础应用-实现计数器
  11. 矩阵论知识整理(未完成,同步更新)
  12. 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
  13. 手游运营数据分析指标百科全说
  14. 张馨予一幅画拍出几十万,然而范冰冰却一直在向粉丝要画!
  15. 软件测试需求分析步骤
  16. 曹大带我学 Go(3)—— 如何用汇编打同事的脸
  17. ThreadPoolTaskScheduler实现动态管理定时任务
  18. 阿里云学生成长计划领取资格考试答案
  19. 决战奶酪之巅,剑指Big Cheeze
  20. MPLab X 配置字的设置

热门文章

  1. 154. Find Minimum in Rotated Sorted Array II
  2. 【Breadth-first Search 】专题3
  3. java监听器原理_java监听器原理
  4. java 存储空间_Java中的存储空间类型
  5. mysql gzip_在mysql中存储GZIP:ed文本?
  6. rs232串口驱动_电脑主板RS232串口硬件设计
  7. ftp 上传文件夹_命令行连接FTP服务器
  8. cpp [Error] reference to ‘count‘ is ambiguous(全局变量的使用模糊不清)
  9. html5同心圆代码,HTML5/Canvas 鼠标跟随的同心圆
  10. 小程序onload_微信小程序开发入门之共享账本(十四)