C# 水排序 微信小游戏

来只 水排序谜题启发式搜索方法_水排序解法小程序-CSDN博客

大神的C++语言转换成C# 语言,更多的请看原作者,这里直接贴C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApp2
{class Program{private const int NC = 12;private const int SIZE = 4;private static readonly List<string> vc = new List<string> { "黄色", "绿色", "翠绿", "青色", "蓝色", "紫色", "棕色", "橙色", "红色", "灰蓝", "褐色", "粉色" };private static List<List<int>> vm = new List<List<int>>();private static int[] avail = new int[NC];private static Dictionary<List<List<int>>, int> visit = new Dictionary<List<List<int>>, int>(new ListComparer());static void Main(string[] args){Init();Dfs(0);OutVm();Console.ReadKey();}private static void OutMap(){for (int i = 0; i < vc.Count; i++){Console.WriteLine(i + " " + vc[i] + "   ");}}private static void Input(){int a;Console.WriteLine("\n输入总试管数目");a = int.Parse(Console.ReadLine());vm = new List<List<int>>(new List<int>[a]);Console.WriteLine("依次输入各试管内颜色,从上往下,空的用-1补足");for (int i = 0; i < vm.Count; i++){vm[i] = new List<int>();//for (int j = SIZE - 1; j >= 0; j--)//{string xx = Console.ReadLine().ToString();string[] xxs = xx.Split(' ');for (int k = 0; k < xxs.Length; k++){a = int.Parse(xxs[k].ToString());if (a == -1) continue;vm[i].Insert(0, a);avail[a]++;}//}}}private static bool Check(){for (int i = 0; i < NC; i++) if (avail[i] != 0 && avail[i] != SIZE) return false;return true;}private static void Init(){OutMap();do{Input();} while (!Check());}private static bool OneCol(List<int> vi){for (int i = 1; i < vi.Count; i++){if (vi[i] != vi[i - 1]){return false;}}return true;}private static bool End(){return vm.All(vi => OneCol(vi));}private static bool CanPour(int i, int j){if (i == j) return false;int si = vm[i].Count, sj = vm[j].Count;if (si == 0 || sj == SIZE) return false;if (sj == 0){return !OneCol(vm[i]);}int ci = vm[i][si - 1], cj = vm[j][sj - 1];if (ci != cj) return false;int num = 0;for (int k = si - 1; k >= 0; k--) if (vm[i][k] == ci) num++;else break;return sj + num <= SIZE;}private static int Pour(int i, int j){int x = 0;while (CanPour(i, j)){int it = vm[i].Count - 1;vm[j].Add(vm[i][it]);vm[i].RemoveAt(it);x++;}return x;}private static void PourF(int i, int j, int num){while (num-- > 0){int it = vm[i].Count - 1;vm[j].Add(vm[i][it]);vm[i].RemoveAt(it);}}private static bool Dfs(int deep){if (visit.ContainsKey(vm)) return false;visit[vm] = 1;if (End() || deep > 40){return true;}for (int i = 0; i < vm.Count; i++){for (int j = 0; j < vm.Count; j++){if (!CanPour(i, j)) continue;int x = Pour(i, j);if (Dfs(deep + 1)){Console.WriteLine("\ndeep = " + deep + " from " + (i + 1) + " to " + (j + 1));return true;}PourF(j, i, x);}}return false;}private static void OutVm(){Console.WriteLine();foreach (var vi in vm){int si = vi.Count;for (int i = SIZE - 1; i >= 0; i--){if (i >= si) Console.Write("-1 ");else Console.Write(vi[i] + " ");}Console.WriteLine();}}//public static void Main()//{//    Init();//    Dfs(0);//    OutVm();//}private class ListComparer : IEqualityComparer<List<List<int>>>{public bool Equals(List<List<int>> x, List<List<int>> y){return x.SequenceEqual(y, new SequenceComparer<int>());}public int GetHashCode(List<List<int>> obj){int hash = 17;foreach (var list in obj){foreach (var item in list){hash = hash * 31 + item.GetHashCode();}}return hash;}}private class SequenceComparer<T> : IEqualityComparer<IEnumerable<T>>{public bool Equals(IEnumerable<T> x, IEnumerable<T> y){return x.SequenceEqual(y);}public int GetHashCode(IEnumerable<T> obj){int hash = 17;foreach (var item in obj){hash = hash * 31 + item.GetHashCode();}return hash;}}}
}

测试

-1 -1 -1 -1
-1 -1 -1 -1
9 5 8 1
3 5 2 9
7 4 2 11
6 8 4 1
3 4 0 11
7 8 2 6
1 10 7 8
6 9 11 2
0 3 10 0
6 10 10 11
9 4 5 3
0 1 5 7

输出

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/723276.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务:Feign篇

1.什么是Feign Feign是一种声明式、模板化的HTTP客户端&#xff0c;可用于调用HTTP API实现微服务之间的远程服务调用。它的特点是使用少量的配置定义服务客户端接口&#xff0c;可以实现简单和可重用的RPC调用。 先来看我们以前利用RestTemplate发起远程调用的代码&#xff…

Vue基础入门(4)- Vuex的使用

Vue基础入门&#xff08;4&#xff09;- Vuex的使用 Vuex 主要内容&#xff1a;Store以及其中的state、mutations、actions、getters、modules属性 介绍&#xff1a;Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff…

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

蓝桥杯倒计时 41天 - 二分答案-最大通过数-妮妮的月饼工厂

最大通过数 思路&#xff1a;假设左边能通过 x 关&#xff0c;右边能通过 y 关&#xff0c;x∈[0,n]&#xff0c;通过二分&#xff0c;在前缀和中枚举右边通过的关卡数&#xff0c;保存 xy 的最大值。 #include<bits/stdc.h> using namespace std; typedef long long ll…

微信小程序接入百度地图(微信小程序插件)使用文档

第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…

【SQL】指定日期的产品价格(IFNULL函数)

题目描述 leetcode题目&#xff1a;指定日期的产品价格 思路 找出所有的产品的指定的日期的价格&#xff1b;若找不到某个产品的更改日期&#xff0c;则将该产品价格设置为10。 关键点&#xff1a; if没有16号的&#xff0c;怎么找到前一个日期的&#xff1f;> 日期小…

Word中的文档网格线与行距问题

在使用Word编辑文档时&#xff0c;经常会发生以下动图展示的这种情况&#xff1a; 上面的动图里&#xff0c;将文字大小放大到某个字号时&#xff0c;单倍行距的间距突然增加很多。造成这种情况的原因是文档中定义了网格线&#xff0c;并且设置了对齐到网格线。如果取消文档中…

EdgeX Foundry 基本操作

文章目录 一、容器管理1.容器操作2.查看容器日志 二、EdgeX UI 操作1.访问 UI1.1. consul1.2. EdgeX Console 2.创建 MQTT 设备2.1.创建设备配置文件2.2.添加设备 3.设备配置文件3.1.配置文件管理3.2.修改配置文件 4.设备4.1.设备管理4.2.修改设备信息4.3.命令4.4.自动采集 5.设…

mac版本的vscode如何运行html文件

1.安装Live Server扩展 需在VS中安装一个拓展插件Live Server&#xff0c;插件寻找方法如下&#xff1a; 2.编写HTML文件 3.启动Live Server 在VSCode中打开你的HTML文件&#xff0c;并点击右键选择"Open with Live Server"&#xff0c;或者点击右下角的"Go…

【MATLAB】 CEEMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 CEEMD信号分解算法 CEEMD 分解又叫互补集合经验模态分解&#xff0c;英文全称为 Complementary Ensemble Empirical Mode Decomposition。 CEEMD是对EEMD的改进&#xff0c;它在EEMD的基础上引入了一个…

46、Numpy手推共空间模式CSP,用于脑电EEG信号分类

一、Numpy实现CSP公式及对应的代码 CSP全部流程&#xff1a; 1、CSP先将数据按照类别分类&#xff0c;两类数据可分为E1、E2 2、计算分类后的原始数据的协方差矩阵&#xff1a; 方差矩阵&#xff1a; C协方差矩阵&#xff0c;E原始EEG信号&#xff0c;trace求迹 实现代码&a…

政安晨【TypeScript高级用法】(四):模块与声明文件

TypeScript是一种静态类型的JavaScript超集语言&#xff0c;它支持模块化开发和声明文件。 模块化开发是一种将代码分割为独立的模块&#xff0c;每个模块只关注自己的功能&#xff0c;然后通过导入和导出来实现模块之间的交互和复用。在TypeScript中&#xff0c;可以使用impo…

短视频矩阵系统--抖去推---年后技术还能迭代更新开发运营吗?

短视频矩阵系统#短视频矩阵系统已经开发3年&#xff0c;年后这个市场还能继续搞吗&#xff1f;目前市面上开发短视频账号矩阵系统的源头公司已经不多了吧&#xff0c;或者说都已经被市场被官方平台的政策影响的不做了吧&#xff0c;做了3年多的矩阵系统开发到现在真的是心里没有…

Android 14后台服务永久保活的技术方法

Android 14后台服务永久保活的技术方法 在本篇博客中&#xff0c;我们将探讨如何创建一个在Android系统中不会被杀死的后台服务。 第一步&#xff1a;创建一个后台服务。 在这一步中&#xff0c;我们需要创建一个后台服务的代码。 第二步&#xff1a;在AndroidManifest.xml中…

【从Python基础到深度学习】10. Python深层拷贝 和 浅层拷贝

对于浅层拷贝而言 不会发生拷贝的数据类型有&#xff1a;number、str、tuple 会发生拷贝的数据类型有&#xff1a;list、dict、set 对于不可变的数据类型&#xff0c;浅层拷贝时&#xff0c;不会发生拷贝&#xff0c;只是引用关系 对于可变数据类型&#…

CSS极速入门

CSS介绍 什么是CSS? CSS(Cascading Style Sheet),层叠样式表,用于控制页面的样式. CSS能够对网页中元素位置的排版进行像素级的精确控制,实现美化页面的效果.能够做到页面的样式和结构分离. CSS可以理解为"东方四大邪术"的化妆术. 对页面展示进行化妆. 基本语法规…

[BUG]vscode插件live server无法自动打开浏览器

问题描述&#xff1a; 点了open with live server但是浏览器没有自动跳出来 http://127.0.0.1:5500/里面是有东西的 解决方法&#xff1a; 配置环境变量&#xff0c;在path中添加program files

SAR ADC学习笔记(3)

一、SAR ADC采样电路 1.采样网络的时域响应&#xff1a;采保信号 2.采样网络的KT/C噪声 3.采样抖动 采样开关的种类 1.单MOS管开关 2.传输门开关 3.栅极自举&#xff08;Bootstrap&#xff09;开关 结论&#xff1a;M4的衬底需要和B点短接&#xff0c;保证B点能够到达高压&…

Doris——纵腾集团流批一体数仓架构

目录 前言 一、早期架构 二、架构选型 三、新数据架构 3.1 数据中台 3.2 数仓建模 3.3 数据导入 四、实践经验 4.1 准备阶段 4.2 验证阶段 4.3 压测阶段 4.4 上线阶段 4.5 宣导阶段 4.6 运行阶段 4.6.1 Tablet规范问题 4.6.2 集群读写优化 五、总结收益 六…

【Vue】VueX仓库

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Vue ⛺️稳中求进&#xff0c;晒太阳 目录 Vue概述 是什么 场景&#xff1a; 优势 构建多组件共享环境 创建一个空仓库 核心概念 - state 状态 1. 提供数据 2.使用数据 ​编辑 …