数独解密小程序

本程序为C#控制台(.Net Framework 目标框架)
使用方法在data.csv中填好已有的数据,需要解密的数据空着不填。

using System;
using System.Diagnostics;
using System.IO;namespace 数独解密
{class Program{static void Main(){// 动态确定数独板的大小int size = GetBoardSizeFromCsv("data.csv");// 创建一个动态大小的二维数组来表示数独板int[,] board = new int[size, size];// 从CSV文件读取数独板的初始值ReadFromCsv(board, "sudoku.csv");// 创建一个 Stopwatch 实例用于计时Stopwatch stopwatch = new Stopwatch();// 开始计时
            stopwatch.Start();// 调用递归函数尝试解决数独if (SolveSudoku(board, size)){// 如果成功解决数独,则打印结果
                PrintBoard(board, size);}else{// 如果没有解,则打印消息Console.WriteLine("没有解");}// 停止计时
            stopwatch.Stop();// 输出耗时Console.WriteLine($"耗时: {stopwatch.Elapsed.TotalMilliseconds} 毫秒");Console.ReadKey();}// 从CSV文件中获取数独板的大小static int GetBoardSizeFromCsv(string filePath){int maxValue = 0; // 初始化最大值为0using (var reader = new StreamReader(filePath)){while (!reader.EndOfStream){var line = reader.ReadLine(); // 读取一行var values = line.Split(','); // 按逗号分割该行// 遍历该行中的每个值foreach (var value in values){if (!string.IsNullOrEmpty(value)) // 如果值不为空
                        {int num = int.Parse(value); // 将字符串转换为整数if (num > maxValue) // 更新最大值
                            {maxValue = num;}}}}}return maxValue; // 返回最大值,作为数独板的大小
        }// 从CSV文件读取数独板的初始值static void ReadFromCsv(int[,] board, string filePath){using (var reader = new StreamReader(filePath)){int row = 0;while (!reader.EndOfStream){var line = reader.ReadLine(); // 读取一行var values = line.Split(','); // 按逗号分割该行// 遍历该行中的每个值for (int col = 0; col < values.Length; col++){if (values[col] != "") // 如果值不为空
                        {board[row, col] = int.Parse(values[col]); // 将值赋给数独板
                        }}row++; // 行索引递增
                }}}// 递归函数:尝试解决数独static bool SolveSudoku(int[,] board, int size){// 遍历每一行和每一列for (int row = 0; row < size; row++){for (int col = 0; col < size; col++){// 如果当前位置是0,表示需要填充if (board[row, col] == 0){// 尝试填入1到size的数字for (int num = 1; num <= size; num++){// 检查填入的数字是否有效if (IsValid(board, row, col, num, size)){// 填入数字board[row, col] = num;// 递归调用解决剩余部分if (SolveSudoku(board, size)){return true; // 如果成功,返回true
                                }else{// 如果失败,重置当前位置为0board[row, col] = 0;}}}// 如果1到size的数字都不能填入,返回falsereturn false;}}}// 如果没有空位置,说明解决成功return true;}// 检查在给定位置填入数字是否有效static bool IsValid(int[,] board, int row, int col, int num, int size){// 检查同一行是否有相同的数字for (int i = 0; i < size; i++){if (board[row, i] == num){return false; // 如果有相同的数字,则无效
                }}// 检查同一列是否有相同的数字for (int i = 0; i < size; i++){if (board[i, col] == num){return false; // 如果有相同的数字,则无效
                }}// 检查子宫格中是否有相同的数字int boxSize = (int)Math.Sqrt(size); // 子宫格的大小int startRow = row - row % boxSize; // 子宫格的起始行int startCol = col - col % boxSize; // 子宫格的起始列for (int i = 0; i < boxSize; i++){for (int j = 0; j < boxSize; j++){if (board[i + startRow, j + startCol] == num){return false; // 如果有相同的数字,则无效
                    }}}// 如果没有相同的数字,则有效return true;}// 打印数独板static void PrintBoard(int[,] board, int size){for (int row = 0; row < size; row++){for (int col = 0; col < size; col++){Console.Write(board[row, col] + " "); // 打印数字
                }Console.WriteLine(); // 打印换行符
            }}}
}
View Code

 

 

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

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

相关文章

数据库索引的简单分类

数据库的索引可以简单的分为四类:主键索引。针对表的主键所创建的索引,这种索引是默认自动创建的,而且只能有一个。唯一索引。避免表中某列的值重复,可以有多个唯一索引,在为某字段限定唯一约束时,会自动创建一个唯一索引。常规索引。一般的用于快速定位检索数据的索引,…

Linux环境下如何升级openssl?

访问官网地址下载最新版本 下载所需版本可访问:历史版本 1.下载OpenSSL源码包 wget https://www.openssl.org/source/old/3.3/openssl-3.3.0.tar.gz 安装必要的依赖 yum install -y openssl-devel perl gcc gcc-c++ zlib 解压源码包 tar -zxvf openssl-3.3.0.tar.gz 进入源码目…

适合证券公司的跨网传输解决方案,了解一下!

证券公司由于其业务特性,涉及大量的敏感财务数据和交易信息,因此通常会在内部实施网络隔离措施。目的是为了保护数据免受未授权访问和网络攻击,确保数据的安全性和保密性,因此急需寻找安全可靠的跨网传输解决方案,实现不同网间数据的安全传输。以下是证券公司可能会采取的…

创建android项目

启动Android Studio,点击New Project因为要使用java语言,模板选择1或2配置如下

如何智能便捷、自动化地进行文件数据采集?

文件数据采集是指从各种源头和渠道收集、整理、清洗、分析和挖掘数据的过程。它是大数据应用的基础,为企业提供全面的决策支持和业务价值。文件数据采集对于不同行业都至关重要,通过有效的文件数据采集,企业可以更好地了解市场动态、优化服务和产品,以及提高运营效率。金融…

2024.7.25模拟赛7

模拟赛 疯狂补题解/改题中。。。 T1 [Permutations & Primes] (未找到)构造一个 \(1-n\) 的序列,使所有区间中 \(mex\) 为质数的最多。感觉题不是很好。结论是:\(1\) 放中间,\(2,3\) 放两边。 打标找规律,感性证明也挺显然的。no codeT2 Spread of Information 首先看道…

如何通过前端表格控件实现自动化报表?

背景 最近伙伴客户的项目经理遇见一个问题,他们在给甲方做自动化报表工具,项目已经基本做好了,但拿给最终甲方,业务人员不太买账,项目经理为此也是天天抓狂,没有想到合适的应对方案。 现阶段主要面临的问题是项目经理和甲方沟通好了需求,就布置了任务,让研发去调研。但…

电影《死侍与金刚狼》迅雷高清版下载/百度云资源下载3.58GB磁力种子分享

在漫威电影宇宙的浩瀚星海中,每一个超级英雄都承载着独特的使命与故事,而《死侍与金刚狼》这部电影,则以其独特的幽默风格、深刻的情感内核以及对多元宇宙概念的巧妙运用,成为了近年来备受瞩目的佳作。本片不仅是对两位经典角色死侍与金刚狼深厚友谊的致敬,更是对漫威电影…

文件系统(十一):Linux Squashfs只读文件系统介绍

liwen01 2024.07.21 前言 嵌入式Linux系统中,squashfs文件系统使用非常广泛。它主要的特性是只读,文件压缩比例高。对于flash空间紧张的系统,可以将一些不需要修改的资源打包成压缩的只读文件系统格式,从而达到节省空间的目的。 另外还有个特性就是它可以分块解压缩,使用数…

《抓娃娃》电影迅雷百度云下载/HD2.59GB高清版磁力种子资源

电影《抓娃娃》自2024年7月16日在中国大陆上映以来,迅速成为暑期档的一部热门影片。该片由闫非和彭大魔联合执导,沈腾和马丽领衔主演,以其独特的剧情设定和深刻的家庭教育主题,引发了广泛的讨论和关注。本文将从影片的基本信息、剧情解析、演员表现、主题探讨以及观众反馈等…

C# 网络编程:.NET 开发者的核心技能

原文:C# 网络编程:.NET 开发者的核心技能 - 小码编匠 - 博客园 (cnblogs.com)一、HTTP 请求 HTTP(Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,主要用于从万维网服务器传输超文本到本地浏览器的传输协议。 在C#中,处理HTTP请求有多种方式,从传统…

转行自我介绍思路参照

一 面试官你好 很高兴来参加这次的面试沟通,我自从毕业以来从事的是IT行业的软件测试工作, 这些年的工作让我系统的掌握了软件测试的技能和优秀的与人沟通的能力。那么过往的工作呢 也取得了不错的成绩, 那么也是一路从测试工程师到高级测试。 二、但是比较遗憾的是,在…