poj 1753/2965 bfs+位运算(关灯游戏/开冰箱门)

poj 3051 dfs(二维矩阵求*连通的最大区域) 输入: 10 5 ..*.....** .**..***** .*...*.... ..****.*** ..****.*** 阅读详情

题意:1753:关灯游戏,求使得画面全是同一个颜色为止的最小步数。

2965:仍然是4*4的方格,对某点的操作为对该点所在行和所在列全部翻转,问最小部数并输出方案。

思路:bfs+位运算。注意:棋盘一共有16个位置,每个位置最多翻转一次,所以搜索空间最大为2^16。每一种状态可以用一个数字表示。

2965:同前,队列里多记录一些信息即可。

1753代码:

#include <stdio.h>
#include <string.h>
char begin[5][5];
int q[1<<16],hash[1<<16];//hash标记下标状态是否被搜到过
int s;
int change(int pos,int x){
	int op = 0;
	if(x/4)//翻转处不在第一行
		op |= (1<<(19-x));
	if(x<12)//翻转处不在第四行
		op |= (1<<(11-x));
	if(x%4!=0)//翻转处不在最左列
		op |= (1<<(16-x));
	if(x%4!=3)//翻转处不在最右列
		op |= (1<<(14-x));
	op |= (1<<(15-x));
	return pos ^= op;
}
int bfs(){
	int i,front,rear;
	front = rear = -1;
	q[++rear] = s;
	while(front < rear){
		int pos = q[++front];
		for(i = 0;i<16;i++){//依次翻转16个位置
			int temp = change(pos,i);
			if(!temp || temp==65535)
				return hash[pos];
			if(!hash[temp]){
				hash[temp] = hash[pos]+1;
				q[++rear] = temp;
			}
		}
	}
	return 0;
}
int main(){
	int i,j;
	freopen("a.txt","r",stdin);
	memset(hash,0,sizeof(hash));
	for(i = 0;i<4;i++)
		scanf("%s",begin[i]);
	for(i = 0;i<4;i++)
		for(j = 0;j<4;j++){
			s <<= 1;
			if(begin[i][j] == 'b')
				s |= 1;
		}
	if(!s || s==65535)//一开始就是完好状态,特殊判断
		printf("0\n");
	else{
		hash[s] = 1;
		i = bfs();
		if(i)
			printf("%d\n",i);
		else
			printf("Impossible\n");
	}
	return 0;
}

2965代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <cstdlib>
using namespace std;
#define clc(s,t) memset(s,t,sizeof(s))
#define INF 0x3fffffff
int state;
int flag[(1<<16)+5];
struct node{
    int x,y,d,p,t;
}q[(1<<16)+5];
int change(int s,int x){
    int i,j,op = 0;
    j = x/4;
    for(i = j*4;i<j*4+4;i++)    //每行
        op |= (1<<i);
    j = x%4;
    for(i = j;i<16;i+=4)        //每列
        op |= (1<<i);
    return s^op;                //进行翻转
}
int bfs(){
    int i,j,front,rear;
    struct node now;
    front = -1;
    rear = 0;
    while(front < rear){
        now = q[++front];
        if(now.t == (1<<16)-1)  //找到目标状态,即16位全部为1
            return front;
        for(i = 0;i<16;i++){
            j = change(now.t,i);//变换后的新状态
            if(!flag[j]){
                q[++rear].t = j;
                q[rear].x = i/4;
                q[rear].y = i%4;
                q[rear].p = front;
                q[rear].d = now.d+1;
                flag[j] = 1;
            }
        }
    }
    return -1;
}
int main(){
    int i,j;
    char ch;
    clc(flag, 0);
    state = 0;
    for(i = 0;i<4;i++){
        for(j = 0;j<4;j++){
            ch = getchar();
            if(ch == '-')
                state |= (1<<(i*4+j));
        }
        getchar();
    }
    q[0].d = 0;
    q[0].p = -1;
    q[0].t = state;
    flag[state] = 1;
    j = bfs();
    printf("%d\n",q[j].d);
    while(q[j].p!=-1){
        printf("%d %d\n",q[j].x+1,q[j].y+1);
        j = q[j].p;
    }
}


poj 1011/2362 dfs+剪枝(拼木棍) 题意:乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位。然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。请你设计一个程序,帮助乔治计算木棒的可能最小长度。每一节木棍的长度都用大于零的整数表示。 思路:dfs+剪枝。其中剪枝具有相当的技巧性,其中一个地方的剪枝没有想到导致tle多次。 几个明显的剪枝点(设ans为最终的答案 阅读详情

相关推荐

MobaXterm终端工具个人学习版安装包及常用配置备份

资源包含 MobaXterm 个人版的安装包以及日常运维常用的基础配置备份文件。适用于网络工程师及运维人员用于日常的服务器管理、SSH 连接及串口调试。 压缩包内附带了个人整理的软件使用技巧与配置说明(仅供个人学习参考)。请各位同行下载后注意,技术工具请尽量支持官方正版,本资源仅供个人测试与交流使用,切勿用于商业环境。

poj 3278 bfs(抓住那头牛)

题意:农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0 1、从X移动到X-1或X+1,每次移动花费一分钟 2、从X移动到2*X,每次移动花费一分钟 假设牛没有意识到农夫的行动,站在原地不动。农夫最少要花多少时间才能抓住牛? 思路:简单bfs即可。可以自己手动写队列,也可以用stl,注意结构体的初始化操作写法。 手动队列: #include #include

dearmango 2032

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

机械臂的「抽风」自救指南:从万向节死锁到毫米级丝滑抓取

poj 1915/2243 bfs(马走日)

题意:给定一个n*n的棋盘,一个起点坐标,一个终点坐标。问从起点“走日”到终点的最少步数。走日即象棋里的马走日。 思路:bfs水题。 #include #include #include #include #include #include using namespace std; #define clc(s,t) memset(s,t,sizeof(s)) #define INF

dearmango 1391

科技中介服务机构如何借助平台提升技术撮合服务的专业性与响应速度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区如何利用AI技术提升科技成果转化服务的响应速度与转化成功率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

dfs 拯救行动

题意:公主被恶人抓走,被关押在牢房的某个地方。牢房用N*M (N, M 思路:除了需要杀死守卫,其余的就是普通的迷宫问题。对于守卫的处理方法为:在队列中加入一个标记位,当第一次遇到守卫时,将标记为置1再次加入队列。 #include #include #include #include #include #include #define min(a,b) ((a)<(b)?(a)

dearmango 1207

11232131231231是的

11232131231231是的

poj 2420/1379 随机/模拟退火(求费马点/最偏离点)

题意:给出平面中一些点,求平面中的一个点,使得这个点到其他所有点的距离之和最短(这个点叫作费马点),并输出这个距离和。 思路:先随机取个点,再取一个步长,朝4个方向走。如果新位置到各点距离比原来小,就走过去;直到当前位置比四周都好,此时缩小步长。如此迭代,直到步长小于题目的精度(这道题是0.1)输出即可。实际上缩小步长蕴含了模拟退火的思想。不过模拟退火中还可以按照一定概率留在原地(即使移动可以获

dearmango 1033

在 NVIDIA Orin (JetPack 6.0) 上配置 PyTorch 2.4 + Torchvision 0.19 的完整避坑指南

本文提供在NVIDIA Jetson Orin设备上,基于JetPack 6.0系统配置PyTorch 2.4与Torchvision 0.19环境的完整指南。通过使用Miniconda环境隔离、安装特定版本PyTorch夜间构建版、编译匹配的Torchvision源码等步骤,解决版本不匹配、CUDA支持等常见问题,确保AI开发环境稳定可用。

weixin_29179311的博客 364

Aloudata 荣登“数智技术系列榜单”和“数据智能服务商 TOP30”

持续助力各行业数智化先进企业突破数据管理技术瓶颈,以更加敏捷、精准和可靠的数据交付驱动企业业务创新与经营提效

Aloudata的博客 666

poj 1315 dfs(带障碍的类八皇后)

简单dfs #include #include #define max(a,b) ((a)>(b)?(a):(b)) #define N 5 char s[N][N]; int flag[N][N],n,res,now; void dfs(int d,int s[N][N],int ava){ int x = d/n; int y = d%n; int i,j,t[N][N]; fo

dearmango 920

Colab虚拟环境配置全攻略:从安装到实战应用

本文详细介绍了在Google Colab中配置Python虚拟环境的完整流程与实战技巧。通过安装Anaconda、创建独立环境、解决常见错误及结合深度学习项目应用,帮助用户有效管理依赖、避免冲突,并利用环境持久化策略提升在Colab中的开发效率与项目可复现性。

weixin_29204121的博客 340

poj 1416 组合数(DIY碎纸机)

题意:公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值。比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1、2、34、6。因为这样所得到的和43 (= 1 + 2 + 34 + 6) 是所有可能中最接近而不超过50的。(比如1, 23, 4, 和6 就不可以,因为它们的和不如43接近50,而12, 34, 6也不可

dearmango 879

MDPI期刊投稿全流程解析:从注册到提交的实用指南

本文详细解析了向MDPI期刊投稿的全过程,从注册账号、完善个人资料、上传稿件,到填写作者信息、推荐审稿人及提交附信等关键步骤。指南强调了使用机构邮箱、遵循期刊模板、认真准备Cover Letter等实用技巧,旨在帮助作者高效、规范地完成投稿,避免常见错误,提升稿件处理效率。

weixin_29250403的博客 924

用友U8接口开发全攻略:从EAI到OpenAPI的5种方式详解(附避坑指南)

本文深度解析了用友U8系统接口开发的五种核心方式:EAI、API、OpenAPI、SQL直连与内部CO组件。文章详细对比了各方式的适用场景、优缺点及实战操作,并提供了清晰的选型决策框架与避坑指南,帮助开发者根据具体业务需求选择最高效、最稳定的集成路径。

weixin_29322855的博客 685

poj 1077 bfs+康托展开(8数码问题)

题意:8数码问题 思路:bfs,用康托展开来

dearmango 816

Open3D 使用RANSAC分割平面【2026最新版】

使用RANSAC从点云中分割平面,用segement_plane函数。博客长期更新,本文最新更新时间为:2026年2月28日。

点云侠的博客 37万+

百练4103 踩方格

题意:有一个方格矩阵,矩阵边界在无穷远处。我们做如下假设: a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上; b. 走过的格子立即塌陷无法再走第二次; c. 只能向北、东、西三个方向走; 请问:如果允许在方格矩阵上走n步,共有多少种不同的方案。2种走法只要有一步不一样,即被认为是不同的方案。 思路:糊里糊涂想也没想写了个dfs,居然在百练上过了。后来仔细一想,动归或者说递

dearmango 783

【DRAM存储器三十五】LPDDR4介绍--主要技术特性之VREF training,为什么要做VREF training?

详述DDR4、LPDDR4需要做vref training的原因和训练过程

highman110的博客 2916

【华为OD机试真题 2025C卷】238、贪吃蛇 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 2025C卷】238、贪吃蛇 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2025e卷,od机试,2025E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2025华为od,如何备战华为od,

正在更新最新华为OD机试2025B卷,提供OJ在线刷题 196

poj1731 有重复全排列

题意:给定几个小写字母(含重复),按照字典序输出其全排列 思路:

dearmango 760

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

poj 1985 树的直径

题意:求树的直径。树的直径即树上距离最远的两个点之间的距离 s

dearmango 733

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STM32F407中文手册

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

poj 1699 搜索(AGCT组成最短串,题目有BUG)

题意:给定若干个DNA(由AGCT组成)串,求一个能够包含所有四

dearmango 719

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

poj 1256 全排列(含有重复字母)

1256

dearmango 714
上一篇: poj 1159 最长公共子串LCS
下一篇: poj 3254 状态压缩(种草)
dumeichen
博客等级 码龄13年 55粉丝 475原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值