POJ 1137 The New Villa

别再乱用M点做边沿检测了!博图(S7-1500)里P指令的DB块正确打开方式 本文探讨了S7-1500 PLC中边沿检测的最佳实践,揭示了传统M区存储的潜在风险,并详细介绍了如何通过DB块实现更可靠、高效的解决方案。文章重点分析了DB块在地址管理、符号访问和多实例支持等方面的优势,并提供了工程级的边沿检测实现方法,包括静态变量设计、全局DB管理和可复用FB封装,帮助工程师提升工业自动化项目的稳定性和可维护性。 阅读详情

/*

复杂BFS

参考了网上别人的程序

POJ 上需要SJ,为了避免这个所以需要对输入进行排序*/

 

#include <iostream>
#include <queue>
#include <algorithm>
#define MAX_S 1024
#define MAX_H 10
using namespace std;

struct statusN
{
    int rNum, bit, step;
    statusN *next;
}status[MAX_H + 2][MAX_S + 2];

struct doorN
{
    int f, t;
    int getOpp(int curS) //-1 not exist
    {
        if(curS == f) return t;
        else if(curS == t) return f;
        else return -1;
    }
}door[MAX_H * MAX_H + 2];

struct controlN
{
    int hNum, lNum;
}control[MAX_H * MAX_H + 2];

int v[MAX_H + 2][MAX_S + 2];
int exp[MAX_H + 2];
int roomNum, doorNum, switNum;

int getLight(int ex)
{
    for(int i = 0; i < roomNum; i++)
        if(exp[i] == ex)
            return i;
    return -1;
}


void print(statusN *cur)
{
    if(!cur->next)
        return;
    print(cur->next);
   
    int bitT = cur->bit, bitF = cur->next->bit, room2 = cur->rNum, room1 = cur->next->rNum;
    if(bitT == bitF)
        cout<<"- Move to room "<<room2+1<<"."<<endl;
    else
    {
        int ex = bitF ^ bitT;
        int which = getLight(ex);
        if(ex & bitT)
            cout<<"- Switch on light in room "<<getLight(ex) + 1<<"."<<endl;
        else
            cout<<"- Switch off light in room "<<getLight(ex) + 1<<"."<<endl;
    }
}

bool solve()
{
    memset(v, 0, sizeof(v));
    statusN *final = &status[0][exp[0]];
    final->next = NULL;
    final->step = 0;   
   
    queue<statusN *> Q;
    v[0][exp[0]] = true;
    Q.push(final);
    bool finish = false;
    statusN *cur;

    int i;
    while(!Q.empty())
    {
        cur = Q.front();
        Q.pop();

        int bit = cur->bit, room = cur->rNum, step = cur->step;

        if(bit == exp[roomNum - 1] && room == roomNum - 1)
        {
            finish = true;
            break;
        }

        for(i = 0; i < doorNum; i++)
        {
            int opp;
            if((opp = door[i].getOpp(room)) != -1 && (bit & exp[opp]) > 0 && (!v[opp][bit]))
            {
                v[opp][bit] = 1;
                statusN *ns = &status[opp][bit];
                ns->next = cur;
                ns->step = step + 1;
                Q.push(ns);
            }
        }
        for(i = 0; i < switNum; i++)
        {
            int ctrlNum = control[i].lNum;
            if(control[i].hNum == room)
            {
                int newBit = bit ^ exp[ctrlNum];
                if(v[room][newBit])
                    continue;
                v[room][newBit] = 1;
                statusN *ns = &status[room][newBit];
                ns->next = cur;
                ns->step = step + 1;
                Q.push(ns);
            }
        }
    }
    if(!finish)
        return false;
    cout<<"The problem can be solved in "<<cur->step<<" steps:"<<endl;
    cur = &status[roomNum - 1][exp[roomNum - 1]];
    print(cur);
    return true;   
}

bool compare(controlN c1, controlN c2)
{
    if(c1.hNum < c2.hNum)
        return true;
    else if(c1.hNum == c2.hNum)
    {
        if(c1.lNum <= c2.lNum)
            return true;
        return false;
    }
    return false;
}


int main()
{
    int i, j, f, t;
    exp[0] = 1;
    for(i = 1; i <= MAX_H; i++)
        exp[i] = exp[i - 1]<<1;

    for(i = 0; i < MAX_H; i++)
    {
        for(j = 0; j < MAX_S; j++)
        {
            statusN cur = {i, j, 0, NULL};
            status[i][j] = cur;
        }
    }
    int caseN = 0;
    while(cin>>roomNum>>doorNum>>switNum && (roomNum + doorNum + switNum) != 0)
    {
        caseN++;
        for(i = 0; i < doorNum; i++)
        {
            cin>>f>>t;
            doorN cur = {f - 1, t - 1};
            door[i] = cur;
        }
        for(i = 0; i < switNum; i++)
        {
            cin>>f>>t;
            if(f == t)
            {
                switNum--;
                i--;
                continue;
            }
            controlN cur = {f - 1, t - 1};
            control[i] = cur;
        }
        cout<<"Villa #"<<caseN<<endl;
        sort(control, control + switNum, compare);
        if (!solve()) cout<<"The problem cannot be solved."<<endl;
        cout<<endl;
    }
    return 0;
}

机械臂速成小指南(八):标准DH法实战——从连杆坐标系到运动学方程 本文详细介绍了机械臂运动学建模中的标准DH法,从连杆坐标系的建立到运动学方程的求解,提供了实用的操作步骤和代码示例。通过DH参数表和变换矩阵的构建,帮助读者快速掌握机械臂运动学建模的核心技术,并解决实际应用中的常见问题。 阅读详情

相关推荐

Frida实战:如何用adb快速连接网易mumu模拟器进行参数Hook(附常见CPU架构问题排查)

本文详细介绍了如何使用Frida和adb快速连接网易MuMu模拟器进行参数Hook,包括环境配置、架构适配、Frida-server部署及常见问题排查。特别针对CPU架构兼容性问题提供了实用解决方案,帮助开发者高效完成逆向调试任务。

weixin_29274969的博客 289

POJ - 1137:The New Villa(bfs+状态压缩)

POJ - 1137:The New Villa(bfs+状态压缩) 我有特殊的状态转移方式,

污miao汪的博客 585

pytorch-cifar100学习资料汇总 - 基于PyTorch的CIFAR-100图像分类实践

pytorch-cifar100是一个基于PyTorch实现CIFAR-100数据集图像分类的开源项目。该项目实现了多种经典的深度学习网络模型,如ResNet、DenseNet、VGG等,为开发者提供了在CIFAR-100数据集上进行图像分类实验的代码范例。pytorch-cifar100项目为我们提供了在CIFAR-100数据集上进行图像分类实验的完整代码实现。无论你是想要学习PyTorch的使用,还是研究不同网络模型在CIFAR-100上的表现,这个项目都是一个很好的起点。

helloaiworld的博客 1123

POJ 1137----The New Villa

问题描述: The New Villa Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1354 Accepted: 443 Description   Mr. Black recently bought a villa in the countryside. Only one thing bothers him: 

我是会娶刘亦菲的 794

三维(点云)语义分割概述以及方法总结

语义分割 语义分割需要两部分 classification: 需要全局信息 segmentation:更加依赖全局信息和局部信息 一般的网络结构是: 提特征-特征映射-特征图压缩(降维)-全连接-分类,其实就是encoder-decoder的过程, 比如在二维的的pspnet,fcn等等 0. 三维表示的数据结构 Point cloud 无序性 点云实际上是无序的,比如有8个点云,你放到...

renhaofan的博客 3万+

【锂离子电池力学耦合及相场法模拟技术与应用】

8. 电化学仿真软件的使用与案例分析 (1) 各向异性纳米线锂化应力分析(实例讲解1) (2) 化学反应及死锂现象研究(案例分析2)(3) 锂化循环损伤计算(案例分析3)6. 4. 电池材料的力学与电化学耦合性能分析(1) 耦合效应对电池性能的影响(2) 耦合模型的验证与应。5. 5. 电池颗粒、极片、电芯尺度力-电-化-热多场耦合模型概述力学-7. 颗粒尺度耦合模型在电池失效分析中的应用。2. 2. 电池电极材料的分类与特性。5. (2) 耦合模型的验证与应用。电化学耦合模型与仿真。

weixin_51101456的博客 523

POJ 1137 The New Villa 笔记

小朋友怕黑,房间的灯不亮坚决不进。r个房间,房间1是起点,房间r是终点(卧室),初始时只有房间1的灯是亮的。房间之间有d个连接,房间 i 和房间 j 连接。s盏灯,灯的开关在另一个房间,房间k的开关控制房间 l 中的灯。求能否到达卧室后只有卧室的灯是亮的。

woniupengpeng的专栏 764

Simulink开发项1000例实战专栏--实例38:基于Simulink的周波变换器(Cycloconverter)

需求分析周波变换器(Cycloconverter),也称为频率变换器或直接变频器,是一种将输入的固定频率交流电直接转换为不同频率的交流电的电力电子设备。它广泛应用于工业领域,如大功率电机驱动、风力发电、船舶推进系统等场合。与传统的间接变频器(如交-直-交变频器)相比,周波变换器具有更高的效率和更简单的结构,适用于需要低频输出的应用场景。

xiaoheshang_123的博客 334

poj 1137 / zoj 1301 (BFS)

最近想刷一些搜索题目, 看到了这题, 这题就是个bfs需要点状压的小技巧, 感觉做搜索题目, 主要还是要仔细很耐心吧。。。 (此题在poj上有个trick, 就是一个房间开关灯时要按字典序, 读入后排个序就可以了。。。) 代码很丑: #include #include #include #include #include #include #include #inc

一个人的生活 955

Allegro技巧----相同模块复用实现快速布局

使用Allegro软件进行PCB Layout设计时,当电路图中有很多路相同的模块,使用模块复用的的操作方法,可以显著提高工作效率,同时也可以使PCB布局在整体上显得美观。 如图,有8个相同的ADC采样电路模块,它们在原理图中的电路也是一样的,对于这多个相同的电路模块,如果一个个元器件布局很明显做了很多重复机械的劳动,效率低下;但是强大的Allegro软件早就考虑到了这点,只需要在PCB中做好其中的一个,则其余相同的模块通过复用的方式,可以快速完成,方便省事还美观。 具体步骤: 1.首先完成一个模块的PC

sinat_15677011的博客 5655

PHP实现SM2算法(附完整源码)

PHP实现SM2算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 4025

ZOJ 1301 The New Villa (BFS + 状态压缩)

题意:黑先生新买了一栋别墅,可是里面的电灯线路的连接是很混乱的(每个房间的开关可能控制其他房间,房间数 写起来有些纠结(实力太弱)...........先对各个房间的灯进行操作,再考虑向其他房间走的问题。 由于要输出路径,所以添加前驱标识,递归输出即可。 #include #include #include #include using namespace std; int n,m,

Paradiser 1105

RAG测评实战代码

本文主要介绍了RAG测评实战代码,希望对使用RAG的同学们有所帮助。 文章目录 1. 前言 2. 实战代码 2.1 实战代码一 2.2 实战代码二

herosunly的博客 1万+

[ZOJ1301][POJ1137] The New Villa

ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1301POJ: http://poj.org/problem?id=1137题目大意:每个房间的开关经常是控制别的房间的灯的。

Dango's happy life 1089

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

The New Villa

题目:The New Villa 题目链接:http://poj.org/problem?id=1137 题目大意:   一个人买了一个别墅,里面有很多房间,特别的是这个别墅的房间里灯的开关是乱套的,也就是说房间1可能没有房间1的灯的开关,而有房间2和房间3的开关,现在从房间1出发,刚开始只有房间1是亮的,只能走到亮着的房间(还必须有门相通),现在问你走到房间n,并且只剩下房间n是亮着的步骤...

weixin_30600197的博客 165

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

POJ1852 Ants

来源:挑战程序设计竞赛 #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1e6 + 5; int arr[maxn]; int main(){ int T, L, n; scanf("%d",&T); while(T--){ scanf("%d %d",&...

姚军 258

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

UVa 321 The New Villa,2B青年怒找卧室

题目链接: UVA : http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=257 POJ  1137: http://poj.org/problem?id=1137 ZOJ  1301: http://acm.zju.edu.

D_Double's Journey 2623

POJ Problem 1002 Solved!

本文使用 Google Docs 编辑,以网页形式发布。最新版本请看以下链接: http://docs.google.com/View?id=df4r7psc_973ccmbxncn POJ Problem 1002 Solved!   这个题目的解题思路与上次写的英文单词自动补全、纠错很相似。先将电话号码用有根树的形式保存,每个节点表示一个号码,从根到叶节点就是一个...

weixin_34192732的博客 142

POJ16:买房子

某程序员开始工作,年薪N万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之K增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N万,房价200万) 输入 一行,包含两个正整数N(10 <= N <= 50), K(1 <= K <= 20),中间用单个空格隔开。 输出...

bajiaoyu517的博客 444

poj完整分类

DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  1024   Calendar Game       简单题  1027   Human Gene Functions   简单题  1037   Gridland            简单题  1052   Algernon s Noxious

zhongkeli的专栏 7874

POJ 2049 Finding Nemo

/*做完这题我打算看《海底总动员》Demo Demo好可爱用广搜过的, 主要思路如下:(1)首先是建图, 由于输入给的都是线段, 但是我们平常处理这类问题都是转换为网格来做的, 因此需要将线段转换为网格.转化的方法是对于每个格子,用其左上角点的坐标来表示这个格子,如果其左上角点的坐标是[i][j],那么这个格子就表示为[i][j].将其四周边界的四条线段归这个格子管.即为每个格

bobten2008的专栏 3293

POJ 2046 Gap

/*BFS,利用set来判重.将状态封装到string大大简化了处理过程*/#include #include #include #include using namespace std;set hashSets;struct elem{    int steps;    string state;};queue bfsq;

bobten2008的专栏 1469

POJ 1166 The clocks

  The ClocksTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 8928 Accepted: 3479Description|-------| |-------| |-------|| | |

bobten2008的专栏 1285

POJ 1101 The Game

/*http://acm.pku.edu.cn/JudgeOnline/problem?id=1101这道题主要采用BFS的变体版本,核心在于:1)除了需要在队列中保存当前节点的方向,坐标外,还需要保存到达当前节点所需的segment数;2)需要使用一个全局minSeg来记录到达某个节点所需的最少segment数,当新的seg 入队列。只保留seg 为d2, 如果d1 ==

bobten2008的专栏 1216

POJ 1708 Game

 /*纯BFS,注意两个点之间可以有多条边,所以每个点相连的点的总数可能很大,一开始把circle 里的conn开小了,WA,开大点就OK了*/#include #include #define MAX_N 100using namespace std;struct circle{    int color;    int countv;    

bobten2008的专栏 1072
上一篇: POJ 1128 Frame Stacking
下一篇: POJ 1141 Brackets Sequence
bobten2008
博客等级 码龄18年 153粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值