数独解法(C)

数独解法(C)未完成 回家继续 usingSystem usingSystem Collections Generic usingSystem Linq usingSystem Text usingSystem Threading Tasks namespaceAlg classSudoku Chain IAlgorithm

未完成,回家继续

数独解法(C) 数独解法(C)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Algorithems
{
    class Sudoku_Chain : IAlgorithm
    {
        class Blank
        {
            public long Possibilies = 0x111111111;
            public int X;
            public int Y;
            public Blank LeftChain;
            public Blank UpChain;

            private string DisplayString
            {
                get
                {
                    return String.Format("[{0},{1}]{2:x9}", X, Y, Possibilies);
                }
            }

            public Blank(int x, int y)
            {
                X = x;
                Y = y;
            }

            public void Update(long pos)
            {
                if (pos == 0)
                    return;
                Possibilies = Possibilies & (~map[pos]);
            }

            public override string ToString()
            {
                return DisplayString;
            }
        }

        long[,] _data = new long[9, 9];
        List
      
    
      
      
      
      
      
       
       
       
       
       
     
        _blanks = 
       
     
       
       
       
       
       new List
       
     
       
       
       
       
        
        ();  
        static 
        readonly 
        long[] map = 
        new 
        long 
        [] {  
        0x000000000, 
        // 
         0 
        0x000000001, 
        // 
         1 
        0x000000010, 
        // 
         2 
        0x000000100, 
        // 
         3 
        0x000001000, 
        // 
         4 
        0x000010000, 
        // 
         5 
        0x000100000, 
        // 
         6 
        0x001000000, 
        // 
         7 
        0x010000000, 
        // 
         8 
        0x100000000, 
        // 
         9 
         };  
        public 
        void Build( 
        int 
        [] data) {  
        for ( 
        int x = 
        0; x < 
        9; x++ 
        ) {  
        for ( 
        int y = 
        0; y < 
        9; y++ 
        ) { _data[x, y] = data[x * 
        9 + 
         y]; } } }  
        private 
        void 
         AnalyzeBlock(Blank blank) {  
        var startX = blank.X / 
        3 * 
        3 
        ;  
        var startY = blank.Y / 
        3 * 
        3 
        ;  
        for ( 
        int x = startX; x < startX + 
        3; x++ 
        ) {  
        for ( 
        int y = startY; y < startY + 
        3; y++ 
        ) { blank.Update(_data[x, y]); } }  
        for ( 
        int x = 
        0; x < 
        9; x++ 
        ) { blank.Update(_data[x, blank.Y]); }  
        for ( 
        int y = 
        0; y < 
        9; y++ 
        ) { blank.Update(_data[blank.X, y]); } }  
        private 
        void 
         SearchBlanks() { Foreach((x,y) => 
         {  
        if (_data[x, y] == 
        0 
        ) {  
        var blank = 
        new 
         Blank(x,y); AnalyzeBlock(blank); _blanks.Add(blank); } }); }  
        private 
        void Foreach(Action< 
        int, 
        int> 
         action) {  
        for ( 
        int x = 
        0; x < 
        9; x++ 
        ) {  
        for ( 
        int y = 
        0; y < 
        9; y++ 
        ) { action(x, y); } } }  
        public 
        void 
         Print() {  
        var sb = 
        new 
         StringBuilder(); sb.AppendLine( 
        " 
         ┌────┬────┬────┐ 
        " 
        );  
        for ( 
        int x = 
        0; x < 
        9; x++ 
        ) { sb.Append( 
        " 
         
        " 
        );  
        for ( 
        int y = 
        0; y < 
        9; y++ 
        ) {  
        if (_data[x, y] == 
        0 
        ) { sb.Append( 
        " 
        _ 
        " 
        ); }  
        else 
         { sb.Append(_data[x, y]); }  
        if (y == 
        2 || y == 
        5 || y == 
        8 
        ) { sb.Append( 
        " 
         
        " 
        ); }  
        else 
         { sb.Append( 
        " 
        " 
        ); } } sb.AppendLine();  
        if (x == 
        2 || x == 
        5 
        ) { sb.AppendLine( 
        " 
         ├────┼────┼────┤ 
        " 
        ); } } sb.AppendLine( 
        " 
         └────┴────┴────┘ 
        " 
        ); Console.WriteLine(sb.ToString()); }  
        public 
        void 
         ShowExample() {  
        var sudoku = 
        new 
        [] {  
        /* 
        0 1 2 3 4 5 6 7 8 
        */ 
        1, 
        0, 
        6, 
        0, 
        5, 
        9, 
        3, 
        0, 
        0, 
        // 
         0 
        2, 
        9, 
        0, 
        1, 
        0, 
        0, 
        0, 
        5, 
        0, 
        // 
         1 
        3, 
        0, 
        3, 
        0, 
        4, 
        0, 
        0, 
        0, 
        9, 
        // 
         2 
        4, 
        1, 
        0, 
        8, 
        0, 
        2, 
        0, 
        0, 
        0, 
        // 
         3 
        5, 
        4, 
        0, 
        0, 
        3, 
        0, 
        9, 
        0, 
        0, 
        // 
         4 
        6, 
        2, 
        0, 
        0, 
        0, 
        1, 
        0, 
        6, 
        0, 
        // 
         5 
        7, 
        0, 
        8, 
        0, 
        0, 
        0, 
        6, 
        0, 
        2, 
        // 
         6 
        8, 
        0, 
        0, 
        4, 
        0, 
        0, 
        0, 
        8, 
        0, 
        // 
         7 
        9, 
        0, 
        0, 
        0, 
        7, 
        8, 
        5, 
        0, 
        1, 
        // 
         8 
         }; Build(sudoku);  
        // 
        Print(); 
         SearchBlanks(); _blanks.ToArray(); } } } 
       
      
    
      
      
      
      
      

View Code

 

转载于:https://www.cnblogs.com/ornithopter/p/3797248.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/220667.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午7:55
下一篇 2026年3月17日 下午7:56


相关推荐

  • 易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]

    易语言跳出循环 c,易语言教程循环控制(到循环尾和跳出循环)[通俗易懂]到循环尾()和跳出循环()是易语言对循环的两种控制方式,教程分别了举例师范讲解。一、官方源码到循环尾调用格式:〈无返回值〉到循环尾()-系统核心支持库->流程控制英文名称:continue本命令转移当前程序执行位置到当前所处循环体的循环尾语句处。本命令为初级命令。操作系统需求:Windows、Linux、Unix跳出循环调用格式:〈无返回值〉跳出循环()-系统核心支持库…

    2022年7月13日
    16
  • js 数组插入删除[通俗易懂]

    js 数组插入删除[通俗易懂]常用的方法是遍历数组,然后使用splice()删除这里我们使用es6中findIndex()查找,然后删除functiondeleteFromArray(arr,compare){constindex=arr.findIndex(compare)if(index>-1){arr.splice(index,1)}}插入数据functioninsertArray(arr,val,compare,maxLen){//返回位置consti

    2022年9月30日
    4
  • MAC系统下 U盘\硬盘速度测试工具BlackMagic Disk Speed Test

    MAC系统下 U盘\硬盘速度测试工具BlackMagic Disk Speed TestMAC 系统下 U 盘 硬盘速度测试工具 BlackMagicDi

    2026年3月20日
    2
  • arp命令_arp协议的主要功能是什么

    arp命令_arp协议的主要功能是什么ARP(AddressResolutionProtocol)命令用于显示和修改“地址解析协议(ARP)”缓存中的项目ARP把IP地址解析成LAN硬件使用的媒体访问控制地址。以太网设备并不识别32位IP地址,它们是以48位以太网地址传输以太网数据包原理某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后就会进行数据传输。如果未找到,则广播A一个A

    2025年8月19日
    8
  • mac idea 2021激活码-激活码分享

    (mac idea 2021激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    150
  • qtav—-ffmeg在ubuntu和win10上的编译和运行

    qtav—-ffmeg在ubuntu和win10上的编译和运行最近在windows上和ubuntu上都安装了qtav并且通过了编译测试,实测播放中英文的视频文件功能正常,有图像有声音。大致情况是,操作系统ubuntu:wkr@sea-X550JK:~$cat/etc/os-releaseNAME=”Ubuntu”VERSION=”16.04.4LTS(XenialXerus)”ID=ubuntuID_LIKE=debianPRETTY_…

    2025年12月2日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号