蛇形魔方

article/2025/10/5 0:51:39

蛇形魔方:

这个玩具是要拼成正方形:

蛇形魔方很简单,不费吹灰之力即可找到解法,也很容易想明白是唯一解。

这里我用深度优先搜索算法求解。

思路和代码都很简单,就是个简单的深度优先搜索,直接上代码:

#include<iostream>
#include<string>
using namespace std;const int MaxDeep = 17;
const int len[MaxDeep] = { 3, 2, 2, 3, 2, 3, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3 };
#define N 3 //3*3*3
#define M N+2 
int board[M][M][M];//坐标分量的取值范围是1-N,0和N+1作为无效边界
const int dx[6] = { 0, 0, 0, 0, 1, -1 };//(dx[i],dy[i],dz[i])是第i个方向的方向向量
const int dy[6] = { 0, 0, 1, -1, 0, 0 };//6个方向分别是上下后前右左
const int dz[6] = { 1, -1, 0, 0, 0, 0 };
const string s[6] = { "上", "下", "后", "前", "右", "左" };
int ans[MaxDeep];void init()
{for (int i = 0; i < M; i++)for (int j = 0; j < M; j++)for (int k = 0; k < M; k++)board[i][j][k] = 1;for (int i = 1; i <= N; i++)for (int j = 1; j <= N; j++)for (int k = 1; k <= N; k++)board[i][j][k] = 0;
}bool visit(int sx, int sy, int sz, int direc, int deep)
{if (deep == MaxDeep)return true;int x = sx + dx[direc], y = sy + dy[direc], z = sz + dz[direc], le = len[deep]-1;while (!board[x][y][z] && le){le--, board[x][y][z] = 1, x += dx[direc], y += dy[direc], z += dz[direc];}x -= dx[direc], y -= dy[direc], z -= dz[direc];bool flag = false;if (le == 0)for (int dir = 0; dir < 6; dir++){if (visit(x, y, z, dir, deep + 1))flag = true, ans[deep] = direc;}while (le < len[deep] - 1){le++, board[x][y][z] = 0, x -= dx[direc], y -= dy[direc], z -= dz[direc];}return flag;
}int main()
{init();	for (int i = 1; i <= N; i++)for (int j = 1; j <= N; j++)for (int k = 1; k <= N; k++){board[i][j][k] = 1;if (visit(i, j, k, 0, 0)){for (int i = 0; i < MaxDeep; i++)cout << s[ans[i]];cout << endl << i << ' ' << j << ' ' << k << endl;}board[i][j][k] = 0;		}return 0;
}

其中,dx,dy,dz用来描述方向向量,在我的很多棋类代码中都有讲到这个flat技术。

由于6个方向的对称性,可以不妨设第一步是往上。

输出结果:

上后下右后左上右前下后左后右前上后
1 1 1
上前下右前左上右后下前左前右后上前
1 3 1
上后下左后右上左前下后右后左前上后
3 1 1
上前下左前右上左后下前右前左后上前
3 3 1


不难发现,虽然输出了4个解法,但是因为旋转对称性,实际上就是唯一解。


http://chatgpt.dhexx.cn/article/OSnM9a0y.shtml

相关文章

c++蛇形矩阵

新人的第一个博客&#xff0c;废话不多说&#xff0c;直接上题目。 输入两个整数 n 和 m&#xff0c;输出一个 n 行 m 列的矩阵&#xff0c;将数字 1 到 nm按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。 输入格式 输入共一行&#xff0c;包含两个整数 n 和 m。 输出…

浅谈蛇形走线怎么用,你知道吗?

蛇形走线是PCB设计中会遇到的一种比较特殊的走线(如下图所示)&#xff0c;很多人不理解蛇形走线的意义。下面对蛇形走线的意义进行简单介绍。 蛇形走线&#xff0c;因为应用场合不同而具不同的作用 一、电脑主板 如果蛇形走线在计算机板中出现,其主要起到一个滤波电感和阻抗匹…

蛇形填数的三种类型

目录 一、三角形蛇形填数 ❀&#xff08;1&#xff09;原理 ❀&#xff08;2&#xff09;执行程序 ❀&#xff08;3&#xff09;运行结果 二、螺旋形蛇形填数 ❀&#xff08;1&#xff09;原理 ❀&#xff08;2&#xff09;执行程序 ❀&#xff08;3&#xff09;运行结果…

Vcpkg使用方法

概观 Vcpkg可帮助您管理Windows&#xff0c;Linux和MacOS上的C和C 库。这个工具和生态系统在不断发展; 您的参与对其成功至关重要&#xff01; 开始 使用管理员身份打开powershell后&#xff0c;依次执行以下指令 git clone https://github.com/Microsoft/vcpkg.git cd vcp…

Windows 下使用 vcpkg + CMake 进行开发

Windows 下使用 vcpkg CMake 进行开发 vcpkg vcpkg 是一款开源的、基于源代码的 C 依赖管理器。简单地说&#xff0c;用户可以使用 vcpkg 安装自己需要的 C 依赖。 将 vcpkg 的整个仓库克隆在本地&#xff0c;再执行提供的脚本&#xff0c;即可完成 vcpkg 的部署&#xff0…

windows安装vcpkg过程下载失败问题的解决方法

vcpkg的中文文档&#xff1a;https://github.com/microsoft/vcpkg/blob/master/README_zh_CN.md 第一步&#xff1a; 从GitHub拉取 git clone https://github.com/Microsoft/vcpkg.git 如果GitHub拉取超时可以运行下面两行代码解决 git config --global --unset http.proxy …

【配置环境】Windows和Linux下安装和使用C/C++第三方库管理工具vcpkg

目录 一&#xff0c;环境准备 二&#xff0c;vcpkg简介 三&#xff0c;Window系统下载vcpkg 四&#xff0c;Linux系统下载vcpkg 五&#xff0c;vcpkg命令介绍 1.命令参照表 2.常用的vcpkg命令以及详细解释 一&#xff0c;环境准备 Git - Downloads 根据平台下载最新版本…

vcpkg:使用 vcpkg

命令 查看Vcpkg支持的开源库列表 查看Vcpkg支持的开源库列表 .\vcpkg\vcpkg search安装一个开源库 这里的“安装”其实是指下载和编译。 比如我们需要安装常用的jsoncpp库&#xff0c;那么执行命令 .\vcpkg\vcpkg install jsoncpp输出 Computing installation plan... A …

【vcpkg】vcpkg:用于 Windows、Linux 和 macOS 的 C++ 包管理器

官网:https://docs.microsoft.com/zh-cn/cpp/build/vcpkg?viewmsvc-160&viewFallbackFromvs-2019 vcpkg vcpkg 是用于 C 的一种命令行包管理器。 它极大地简化了 Windows、Linux 和 macOS 上第三方库的购置与安装。 如果项目要使用第三方库&#xff0c;建议通过 vcpkg 来…

在Visual Studio中激活vcpkg环境

在Visual Studio 2022 17.4中&#xff0c;vcpkg环境现在会自动激活。 一个vcpkg环境是由一个manifest文件描述的&#xff0c;该文件捕获了构建应用程序所必需的工件&#xff08;了解更多关于vcpkg工件的信息&#xff09;。 当前vcpkg工件的体验主要是针对嵌入式开发人员&…

Visual Studio工具 vcpkg简介

vcpkg是命令行包管理工具&#xff0c;在使用第三方库的c或c开发中可以简化相关的配置操作。vcpkg安装的包支持Visual Studio 2015 update 3及以上版本&#xff0c;包括vs2017工具集&#xff0c;目前在windows平台已有超过900多个包&#xff0c;linux平台超过350个包。在默认情况…

windows 下包管理工具vcpkg安装

主要参考博文&#xff1a;vcpkg安装及使用_我叫电池的博客-CSDN博客_vcpkg安装 由于需要在离线环境下面搭建开发环境&#xff0c;所有的包只能离线安装了&#xff0c;包括这个管理工具vcpkg的安装&#xff0c;也必须是离线安装。 一. 下载安装vcpkg管理工具 下载目录&#x…

Vcpkg介绍及使用

Vcpkg用于在Windows、Linux、Mac上管理C和C库&#xff0c;极大简化了第三方库的安装&#xff0c;它由微软开源&#xff0c;源码地址&#xff1a;https://github.com/Microsoft/vcpkg&#xff0c;最新发布版本为2023.04.15 Release&#xff0c;它的license为MIT。 在windows上安…

Vcpkg C/C++库管理工具安装和使用教程(链接VS2019)

1、概述&#xff1a; Vcpkg是可用于Windows&#xff0c;linux和MacOS上跨平台的 C/C 库管理工具&#xff0c;是一款开源工具。在此对vcpkg的安装做一个简要的说明&#xff0c;有关具体命令的使用&#xff0c;在安装成功后使用 vcpkg help 或者 vcpkg help[comment] 可以获取特…

vcpkg安装及使用

vcpkg安装及使用 参考链接 1. 安装 内容复制自官方文档 首先&#xff0c;请下载vcpkg并执行 bootstrap.bat 脚本。 它可以安装在任何地方&#xff0c;但是通常我们建议您使用 vcpkg 作为 CMake 项目的子模块&#xff0c;并将其全局安装到 Visual Studio 项目中。我们建议您使…

vcpkg安装指定版本的库

由于fmt版本过高&#xff0c;部分依赖其的库使用时会报错&#xff08;错误 C2338 Cannot format an argument. To make type T formattable provide a formatter<T> specialization&#xff09;。 vcpkg install fmt:x64-windows 默认装的是fmt9.1.0&#xff0c;但是…

vcpkg基本使用

1. vcpkg安装 将下列powershell代码存成ps1文件&#xff0c;在目录下shift右键->打开power shell窗口&#xff0c;运行脚本后vcpkg即安装完成。 # 1. 创建目录、下载vcpkg&#xff1a; mkdir -f D:/APPs cd D:/APPs # github # git clone https://github.com/microsoft/vc…

Visual Studio开源库集成器Vcpkg全教程--利用Vcpkg轻松集成开源第三方库

利用Vcpkg轻松集成开源第三方库 1. 为什么要用Vcpkg 1.1. 传统使用开源库的方法 1.1.1. 编译工具1.1.2. 编译类型1.1.3. 工程目录设定 1.2. Vcpkg的优点 2. 获取Vcpkg 2.1. 下载Vcpkg2.2. 编译Vcpkg 3. 使用Vcpkg 3.1. 查看Vcpkg支持的开源库列表3.2. 安装一个开源库3.3. 指定编…

VCPKG安装和使用教程

文章目录 1. 安装2. 使用命令选项 3. 集成vcpkgWindows 上的 Visual Studio 集成Linux 或 macOS 上的 Visual Studio Code 集成删除 vcpkg 集成 使用举例4. 详细介绍4.1 新增库4.2 删除库4.3 查看已经安装的列表4.4 更新已经安装的开源库 1. 安装 去GitHub上下载源码&#xff…

vcpkg快速入门手册

文章目录 1. 简介2. 安装与使用2.1 获取vcpkg2.2 编译vcpkg2.3 vcpkg的文件夹层次结构2.4 设置vcpkg的环境变量2.5 vcpkg的常用命令2.6 安装包与Visual Studio集成 3. 常见的C库的CMake配置方式3.1 Boost3.2 cereal3.3 Ceres Solver3.4 CGAL3.5 FLANN3.6 GDAL3.7 GLEW3.8 GMP3.…