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,一经查实,立即删除!

相关文章

【python】yaml转成json

姊妹篇&#xff1a;【python】json转成成yaml yaml数据&#xff1a; address:city: 北京市postalCode: 100000street: 北京路123号 age: 30 cart: - product:name: 笔记本电脑price: 1199.99quantity: 2 - product:name: 智能手机price: 599.99quantity: 1 children: - age: …

微服务: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;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…

“大数据应用开发”赛项

“大数据应用开发” 赛项 任务书 背景描述 大数据时代背景下&#xff0c;电商经营模式发生很大改变。在传统运营模式中&#xff0c;缺乏数据积累&#xff0c;人们在做出一些决策行为过程中&#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…

【Flutter 面试题】什么是异步编程 Flutter中如何处理异步操作?

【Flutter 面试题】什么是异步编程 Flutter中如何处理异步操作&#xff1f; 文章目录 写在前面解答补充说明从网络API异步获取数据并解析 写在前面 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#x…

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

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

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

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

【前端开发】HTML1

HTML标签 HTML全称 Hypertext Markup Language &#xff08;超文本标记语言&#xff09; 通过一系列的标签来定义文本、图像、链接等等。HTML标签是由尖括号包围的关键字。 双标签&#xff1a;拥有开始标签和结束标签&#xff0c;内容位于两者之间 <p>这是一个段落<…

Spring MVC AbstractHandlerMapping原理解析

在Spring MVC框架中&#xff0c;AbstractHandlerMapping是一个核心的组件&#xff0c;它负责将HTTP请求映射到相应的处理器&#xff08;Controller&#xff09;。这种映射基于请求的URL或其他条件进行。为了更好地理解Spring MVC的工作机制&#xff0c;本文将深入探讨AbstractH…

大数据运维面试1

1、OBS对象储存&#xff0c;hive不兼容怎么办&#xff1b; ①.确保OBS与Hive的集成 确认您的Hive版本是否支持与OBS集成。如果需要&#xff0c;您可能需要升级Hive或者使用特定的插件来实现集成。 ②.配置OBSFileSystem 使用OBSFileSystem插件&#xff08;OBSA-HDFS&…

HTML5- 拖拽功能

HTML5- 拖拽功能 ​ HTML5新增了拖拽功能&#xff0c;但不是所有元素都能拖拽&#xff0c;如果希望该元素强制可以被拖拽&#xff0c;加一个行内属性 draggable"true" 对应还提供了以下方法&#xff1a; dragstart 开始拖拽时触发 dragend 结束拖拽时触发给容器加…

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.设…

【GO】语言特点 | Go和Java的对比

while循环 go语言中没有while循环&#xff0c;一般都是用for循环替代 while (条件) {} // Java的for循环for true {} // go 语言中会用一个为真的表达式作为是否 会进入循环的条件&#xff0c;也就是把其他语言的for和while合并了for循环 for (Type item : list) {} // j…

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的基础上引入了一个…

转载)word输出高分辨PDF并且有链接跳转功能

直接用Adobe高质量打印会丢失超链接信息。 直接word会导致图片质量降低。 &#xff08;adobe PDFmaker插件在我电脑上搞不好&#xff0c;所以没试过&#xff09; 解决方法&#xff1a;adobeAutoBookmark

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

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