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://xiahunao.cn/news/2813163.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Excel 使用空格或TAB分列

1 选择“数据”>“分列”。 在“文本分列向导”中&#xff0c;选择“分隔符号”>“下一步”。 选择数据的“分隔符”。 例如&#xff0c;“逗号”和“空格”。 可在“数据预览”窗口预览数据。 选择“下一步”&#xff0c;在工作表 目标&#xff0c;在工作表中想显示拆分…

现代化数据架构升级:毫末智行自动驾驶如何应对年增20PB的数据规模挑战?

毫末智行是一家致力于自动驾驶的人工智能技术公司&#xff0c;其前身是长城汽车智能驾驶前瞻分部&#xff0c;以零事故、零拥堵、自由出行和高效物流为目标&#xff0c;助力合作伙伴重塑和全面升级整个社会的出行及物流方式。 在自动驾驶领域中&#xff0c;是什么原因让毫末智行…

10 款数据恢复软件功能和有效性对比(2024 年更新)

数据丢失可能是一种痛苦的经历&#xff0c;无论是由于意外删除、硬件故障还是软件损坏。值得庆幸的是&#xff0c;数字时代带来了强大的数据恢复解决方案。 随着我们进入 2024 年&#xff0c;市场上充斥着旨在有效检索丢失数据的先进软件。在本文中&#xff0c;我们将探讨 2024…

Docker基础篇(六) dockerfile体系结构语法

FROM&#xff1a;基础镜像&#xff0c;当前新镜像是基于哪个镜像的 MAINTAINER &#xff1a;镜像维护者的姓名和邮箱地址 RUN&#xff1a;容器构建时需要运行的命令 EXPOSE &#xff1a;当前容器对外暴露出的端口号 WORKDIR&#xff1a;指定在创建容器后&#xff0c;终端默认登…

YOLOv9中“CBLinear”的结构!

ADown结构出炉啦&#xff0c;收藏起来写论文用&#xff01; 论文链接&#xff1a; YOLOv9: Learning What You Want to Learn Using Programmable Gradient 代码链接&#xff1a;https://github.com/WongKinYiu/yolov9/tree/main 1.代码&#xff1a; 代码路径&#xff1a;yol…

家政小程序有哪些功能 怎么制作

随着人们生活节奏的加快&#xff0c;家政服务变得越来越受到人们的青睐。为了提升家政服务的便捷性和高效性&#xff0c;家政小程序成为了越来越受欢迎的选择。下面具体介绍家政小程序有哪些功能&#xff0c;如何制作。 1. 展示家政服务 在小程序中&#xff0c;上传所有的家政…

Spring-Cloud-Gateway集成Sentinel限流

1&#xff09;gateway添加sentinel相关依赖 <spring-cloud.version>2021.0.1</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version><dependencies><!--gateway--><dependency><gro…

STM32 4位数码管和74HC595

4位数码管 在使用一位数码管的时候&#xff0c;会用到8个IO口&#xff0c;那如果使用4位数码管&#xff0c;难道要使用32个IO口吗&#xff1f;肯定是不行的&#xff0c;太浪费了IO口了。把四个数码管全部接一起共用8个IO口&#xff0c;然后分别给他们一个片选。所以4位数码管共…

数字电路 第四章—第三节(同步触发器)

一、同步RS触发器 1、电路组成及逻辑符号 &#xff08;1&#xff09;与非门、构成基本触发器&#xff0c;与非门、是控制门&#xff0c;输入信号、通过控制门进行传送。 &#xff08;2&#xff09;CP称为时钟脉冲&#xff0c;是输入控制信号。 2、工作原理 &#xff08;1&a…

C++之类和对象(2)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 2. 赋值运算符只能重载成类的成员函数不能重载成全局函数 3. 用户没有显式实现时&…

C语言中strstr函数的使用!

strstr函数的作用是什么&#xff1f; 查找子字符串 具体直接看下面的这段代码我相信你必明白 #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { char *p1 "abcdefghijklmnopqrstuvwxyz"; char* p2 "abc"; char* r…

实现unity场景切换

本文实现两个按键实现场景1和场景2之间的切换 ①首先在unity 3D中创建两个场景&#xff0c;分别为Scene1和Scene2 ②在Scene1中创建一个Button&#xff0c;修改txt内容为“To Scene2”&#xff0c;并在Buttons下创建一个空物体&#xff0c;用于挂载脚本。 脚本Trans Scene.…

【链表面试题】解决环形链表和相交链表问题

在力扣上发现这样的几道题&#xff0c;尝试做了一下&#xff0c;也发现了一个关于这类题的一种做法&#xff1a;快慢指针的使用。废话不多说&#xff0c;上例题 目录 一、环形链表 1.定义&#xff08;概念&#xff09; 2.如何判断是否为环形链表 1.快慢指针 2.为什么快指针…

nginx基础模块配置详解

目录 一、Nginx相关配置 1、nginx配置文件 2、nginx模块 二、nginx全局配置 1、关闭版本或修改版本 1.1 关闭版本 1.2 修改版本 2、修改nginx启动的子进程数 3、cpu与worker进程绑定 4、PID路径 5、nginx进程的优先级 6、调试worker进程打开文件的个数 7、nginx服…

嵌入式学习day25 Linux

进程基本概念: 1.进程: 程序&#xff1a;存放在外存中的一段数据组成的文件 进程&#xff1a;是一个程序动态执行的过程,包括进程的创建、进程的调度、进程的消亡 2.进程相关命令: 1.top 动态查看当前系统中的所有进程信息&#xff08;根据CPU占用率排序&a…

python Matplotlib Tkinter-->tab切换1

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox import …

MySQL之大表删除(基于硬链接方式)

在DROP TABLE的时候&#xff0c;所有进程不管是DDL还是DML都被HANG起&#xff1b;直到DROP结束才继续执行&#xff1b;这是因为INNODB会维护一个全局独占锁&#xff08;在table cache上面&#xff09;&#xff0c;直到DROP TABLE完成才释放。在我们常用的ext3,ext4&#xff0c;…

关于timeline的详细解析

关于timeline的详细解析 初始化画布 在echarts中有一个组件叫timeline他与echart中的其他图表结合起来 能很好的展现一段时间内各种数据的变化趋势 接下来我将用官网案例去逐步展示一下关于timeline中的各种详细配置 首先我们创建好vue的组件结构先尝试一些简单的小demo看看…

GO——echo中间件原理

原理 参考&#xff1a;https://blog.csdn.net/liyunlong41/article/details/104043047 func IAMMiddleware1(next echo.HandlerFunc) echo.HandlerFunc {return func(ctx echo.Context) error {fmt.Println("IAMMiddleware1")return next(ctx)} }echo中间件struct定…

前端sql条件拼接js工具

因为项目原因&#xff0c;需要前端写sql&#xff0c;所以弄了一套sql条件拼接的js工具 ​ /*常量 LT : " < ", LE : " < ", GT : " > ", GE : " > ", NE : " ! ", EQ : " ", LIKE : " like &qu…