首页 > 其他分享 >hdu1195 Open the Lock

hdu1195 Open the Lock

时间:2024-03-27 23:00:44浏览次数:27  
标签:en string int Lock vis hdu1195 n0 include Open

双向广搜的没写,这个是普通bfs,哪天改一下……

#include <iostream>
#include <algorithm>
#include <string>
#include <queue>
#include <cstring>
using namespace std;

int T, vis[10000];
string st, en;
int dir[2] = {-1, 1};
typedef struct {
	string a;
	int ans;
}Node;

string op(string s, int i, int add)
{
	s[i] += add;
	if (s[i] < '1')
		s[i] = '9';
	else if (s[i] > '9')
		s[i] = '1';
		
	return s;
}

void bfs()
{
	queue<Node> q;
	Node n0;
	
	n0.a= st, n0.ans = 0;
	q.push(n0);
	while (!q.empty())
	{
		Node n1 = q.front(), n2;
		q.pop();
		if (n1.a == en)
		{
			cout << n1.ans << endl;
			return;
		}
		n2 = n1;
		for (int i = 0; i < 4; i++)
		{
			for (int j = 0; j < 2; j++)
			{
				n2.a = op(n1.a, i, dir[j]);
				if (vis[stoi(n2.a)])
					continue;
				vis[stoi(n2.a)] = 1;
				n2.ans = n1.ans + 1;
				q.push(n2);
			}
		}
		for (int i = 0; i < 3; i++)
		{
			n2 = n1;
			swap(n2.a[i], n2.a[i + 1]);
			if (vis[stoi(n2.a)])
				continue;
			vis[stoi(n2.a)] = 1;
			n2.ans++;	
			q.push(n2);
		}
	}
}

int main()
{
	cin >> T;
	while (T--)
	{
		memset(vis, 0, sizeof(vis));
		cin >> st >> en;
		bfs();
	}
	
	return 0;
}

标签:en,string,int,Lock,vis,hdu1195,n0,include,Open
From: https://www.cnblogs.com/nephna/p/18100521

相关文章

  • opensips的dispatcher模块笔记
    操作系统:CentOS7.6_x64opensips版本:2.4.9dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。我将从以下几方面进行展开:模块数据库说明模块参......
  • ReentrantLock 原理
    (一)、非公平锁实现原理1、加锁解锁流程先从构造器开始看,默认为非公平锁实现publicReentrantLock(){sync=newNonfairSync();}NonfairSync继承自AQS没有竞争时加锁流程构造器构造,默认构造非公平锁(无竞争,第一个线程尝试加锁时)加锁,luck(),finalvoidlo......
  • 【译】OpenAI 的 Sora 如何通过涌现能力反噬物理世界
    原作:JamieW引言:当我第一次看到Sora演示视频时,我产生了一个惊人的想法:这个奇迹是否是由UE5和Render的结合驱动的?还有其他什么方式可以如此生动地呈现出咖啡杯海盗船上汹涌澎湃的海洋或者速度飞驰汽车后面翻滚扬尘呢?/Gemini翻译/然而,一位视觉算法专家迅速否定了我对Sora依赖像U......
  • 实验一 密码引擎-1-OpenEuler-OpenSSL编译
    安装Ubuntu和OpenEuler虚拟机下载最新的OpenSSL源码(3.2.1版本)用自己的8位学号建立一个文件夹,cd你的学号,用pwd获得绝对路径参考https://www.cnblogs.com/rocedu/p/5087623.html先在Ubuntu中完成OpenSSL编译安装,然后在OpenEuler中重现./config--prefix=..(学号目录......
  • agx orin nx 安装 opencv4.9 cuda 版本
    1.卸载原来的CPU版opencvsudoaptpurgelibopencv*sudoaptupdate2.找一个路径,存放下载opencv安装包sudowget-Oopencv-4.9.0.zipwgethttps://github.com/opencv/opencv/archive/4.9.0.zipsudowget-Oopencv_contrib-4.9.0.zipwgethttps://github.com/openc......
  • sychronized和ReentrantLock对比
    共同点①都用于多线程对共享对象的访问。②都是可重入锁。③都保证了可见性和互斥性。不同点①ReentrantLock显示获取和释放锁;synchronized隐式获取和释放锁。②Reentrant可响应中断、可轮询,为处理锁提供了更强的灵活性。③ReentrantLock是API级别的,synchronized是JVM级......
  • openresty 升级
     1.下载相关的依赖包解压wget-chttp://www.zlib.net/zlib-1.2.12.tar.gzwget-chttps://www.openssl.org/source/openssl-1.1.1q.tar.gzwget-chttps://nchc.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gztar xfzlib-1.2.12.tar.gz-C /opt......
  • ReentrantLock重入锁
    ​一,重入锁定义重入锁,顾名思义,就是支持重新进入的锁,表示这个锁能够支持一个线程对资源重复加锁。如果一个线程已经拿到了锁,那么他需要再次获取锁的时候不会被该锁阻塞。举个例子,publicsynchronizedvoidtest(){dosomething...test2();}publicsynchronizedvoid......
  • opencv开发环境搭建window
    1.python安装官网地址https://www.python.org/根据需求下载最新或者指定版本,下载完成后双击exe进行安装。安装完成后,需要环境变量->系统变量->Path 新增,把Python安装的填入。这样可以在cmd下直接使用Python。  2.安装 numpymatplotlibopencv-python python-m......
  • 【实战教程】Spring Boot项目集成华为openGauss数据库的关键步骤与注意事项
    引言:随着国产数据库技术的崛起,华为openGauss凭借其高性能、安全可靠及易用性成为了众多开发者的首选方案。本篇技术文章将聚焦于如何在SpringBoot项目中成功集成华为openGauss数据库,并揭示其中的一些关键步骤与注意事项,助您轻松驾驭这一强大的数据库引擎。正文:一、环境准备......