首页 > 其他分享 >ZOJ 4020 Traffic Light(走迷宫变形)

ZOJ 4020 Traffic Light(走迷宫变形)

时间:2023-05-26 15:05:23浏览次数:59  
标签:int Light ZOJ next second que Traffic top first


传送门

我感觉就是一个走迷宫的题,只不过这个的墙是变化的。但是因为一直在0-1之间转换,所以把走到当前位置的步数进行判断,如果是奇数就把当前位置的灯状态改变,偶数不用处理,然后就是基本的搜索了。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
vector<int>mp[maxn];
vector<int>vis[maxn];
vector<int>step[maxn];
int n,m,si,sj,ei,ej;
typedef pair<int,int> pq;
int Bfs()
{
    queue <pq> que;
    while(!que.empty())
        que.pop();
    pq tmp;
    tmp.first = si;
    tmp.second = sj;
    que.push(tmp);
    step[si][sj] = 0;
    vis[si][sj] = 0;
    while(!que.empty())
    {
        pq top = que.front();
        que.pop();
        if(top.first == ei && top.second == ej)
            return step[top.first][top.second];
        int next_x,next_y;
        int pp = step[top.first][top.second];
        if(pp & 1)
            mp[top.first][top.second] = !mp[top.first][top.second];
        if(mp[top.first][top.second] == 0)
        {
            for(int i = 1;i <= 2; i++)
            {
                if(i == 1)
                {
                    next_x = top.first + 1;
                    next_y = top.second;
                }
                else if(i == 2)
                {
                    next_x = top.first - 1;
                    next_y = top.second;
                }
                if(next_x >= 1 && next_x <= n && next_y >= 1 && next_y <= m && !vis[next_x][next_y])
                {
                    pq dui;
                    dui.first = next_x;
                    dui.second = next_y;
                    que.push(dui);
                    vis[next_x][next_y] = 1;
                    step[next_x][next_y] = pp + 1;
                }
            }
        }
        else if(mp[top.first][top.second] == 1)
        {
            for(int i = 1;i <= 2; i++)
            {
                if(i == 1)
                {
                    next_x = top.first;
                    next_y = top.second + 1;
                }
                else if(i == 2)
                {
                    next_x = top.first;
                    next_y = top.second - 1;
                }
                if(next_x >= 1 && next_x <= n && next_y >= 1 && next_y <= m && !vis[next_x][next_y])
                {
                    pq dui;
                    dui.first = next_x;
                    dui.second = next_y;
                    que.push(dui);
                    vis[next_x][next_y] = 1;
                    step[next_x][next_y] = pp + 1;
                }
            }
        }
    }
    return -1;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&n,&m);
        for(int i = 1;i <= n; i++)
        {
            mp[i].clear();
            vis[i].clear();
            step[i].clear();
            mp[i].resize(m+5);
            vis[i].resize(m+5);
            step[i].resize(m+5);
            for(int j = 1;j <= m; j++)
                scanf("%d",&mp[i][j]);
        }
        scanf("%d %d %d %d",&si,&sj,&ei,&ej);
        printf("%d\n",Bfs());
    }
    return 0;
}

 

标签:int,Light,ZOJ,next,second,que,Traffic,top,first
From: https://blog.51cto.com/u_16131191/6356110

相关文章

  • ZOJ 3960 What Kind of Friends Are You?(模拟)
    传送门给你几个人,然后下i行对应的是回答出来第i个问题的人,最后询问回答出来了哪几个问题的是谁。用一个map,存名字和数字,回答出的问题编号也转化为2进制,然后转化为10进制,这样的话每个人回答出的问题就对应的是一个数字,询问的时候也把2进制的串转化为10进制,这样的话比对就比较方便。......
  • ZOJ 3961 Let's Chat
    传送门给你A的区间和B的区间,然后问你重合的区间。答案就是求重合的区间长度-m+1的值。因为数据量不大,所以就让A的每个区间都对B的区间进行匹配,然后求和就可以了。这就是一种暴力。#include<bits/stdc++.h>usingnamespacestd;constintmaxn=150;typedefpair<int,int>pq;p......
  • ZOJ 3958 Cooking Competition
    传送门也没什么好说的,就根据题意说的写就完事儿了。#include<bits/stdc++.h>usingnamespacestd;intmain(){//freopen("in.txt","r",stdin);cin.tie(0);cout.tie(0);intt,ko,to;cin>>t;while(t--){intn;......
  • ZOJ 3959 Problem Preparation
    传送门根据题目描述写,对于每组给定的数据判断是否满足四个要求就可以了。#include<bits/stdc++.h>usingnamespacestd;intx[120];intmain(){//freopen("in.txt","r",stdin);cin.tie(0);cout.tie(0);intt;cin>>t;while(t--){......
  • 2023CVPR_Learning a Simple Low-light Image Enhancer from Paired Low-light Instan
    一.motivation以前的大多数LIE算法使用单个输入图像和几个手工制作的先验来调整照明。然而,由于单幅图像信息有限,手工先验的适应性较差,这些解决方案往往无法揭示图像细节。二.contribution1.提出一个成对低光图像输入(相同内容,不同的曝光度)2.在输入之前进行了一个去噪操作,再......
  • LightDB-A 支持oracle执行计划下推
    LightDB-A支持创建外部表,外部数据源可以是oracle,postgresql等.在LightDB-A创建oracleserver和用户映射:CREATESERVERoradbFOREIGNDATAWRAPPERoracle_fdwOPTIONS(dbserver'//x.x.x.x:1521/test');GRANTUSAGEONFOREIGNSERVERoradbTOfj;CREATEUSERMAPPING......
  • lightdb创建oracle兼容分区表
    zjh@postgres=#createtablehash_part_tab(idnumber,deal_datedate,area_codenumber,nbrnumber,contentsvarchar2(4000))zjh@postgres-#partitionbyhash(deal_date)zjh@postgres-#PARTITIONS12;ERROR:pleasesetoraclecompatiblemodefororaclepartit......
  • Light oj 1245 【数学题】
    1245-HarmonicNumber(II)PDF(English)StatisticsForumTimeLimit: 3second(s)MemoryLimit: 32MBIwastryingtosolveproblem '1234-HarmonicNumber',IwrotethefollowingcodelonglongH(intn){longlongres=0;for(......
  • mysql与lightdb中的insert on duplicate/replace
    最近看pg中insert的实现源码,看到onconflict的excluded优点疑惑,顺带总结下mysql和pg中已存在更新、不存在插入的差异(注:oracle是mergeinto实现)。在mysql中的insertonduplicate和lightdb的onconflict是等价的。逻辑都是基于唯一约束进行已存在则更新,否则插入。insertrecordIF......
  • 全新的照片后期处理软件Lightroom Classic 2022(lrc2022)Mac版
    LightroomClassic2022是一款全新的照片后期处理。通过使用其卓越的图形处理功能,该软件不仅可以帮助您轻松地制作出创意的照片,而且还可以为您带来意想不到的效果。对照片,视频和图像编辑工具进行优化。这些新功能使您可以在处理图像时使用编辑器之外的方法进行编辑,从而节省时间并......