数独暴力破解代码(code by unity)

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class testSudo
{
class SudokuItem
{
public bool isNormal = false; //固定数字 不需要检测期望值
public int value; //该item存的值
public List<int> expectValueList; //该item是否可用1-9 1:可用 0:不可用
}

static List<List<SudokuItem>> sudoList;

[MenuItem("testSudo/action")]
public static void SudoAction()
{
int[][] target = {
new int[]{8,0,0,0,0,0,0,0,0},
new int[]{0,0,3,6,0,0,0,0,0},
new int[]{0,7,0,0,9,0,2,0,0},
new int[]{0,5,0,0,0,7,0,0,0},
new int[]{0,0,0,0,4,5,7,0,0},
new int[]{0,0,7,1,0,0,0,3,0},
new int[]{0,0,1,0,0,0,0,6,8},
new int[]{0,0,8,5,0,0,0,1,0},
new int[]{0,9,0,0,0,0,4,0,0}
};

ConstructionSudoku(target);
BeginCalculate(0);

string log = " ";
for (int r = 0; r < 9; r++)
{
for (int c = 0; c < 9; c++)
{
log += sudoList[r][c].value + " ";
}

log += "\n ";
}

Debug.Log(log);
}

//构建一个数独链表
public static void ConstructionSudoku(int[][] target)
{
sudoList = new List<List<SudokuItem>>();
for (int r = 0; r < 9; r++)
{
List<SudokuItem> rList = new List<SudokuItem>();
for (int c = 0; c < 9; c++)
{
SudokuItem newItem = new SudokuItem();
newItem.value = 0;
newItem.expectValueList = new List<int>(new int[9] { 1, 1, 1, 1, 1, 1, 1, 1, 1 });
rList.Add(newItem);
}

sudoList.Add(rList);
}

for (int r = 0; r < 9; r++)
{
for (int c = 0; c < 9; c++)
{
if (target[r][c] > 0)
{
sudoList[r][c].isNormal = true;
sudoList[r][c].value = target[r][c];
sudoList[r][c].expectValueList = new List<int>(new int[9] { 0, 0, 0, 0, 0, 0, 0, 0, 0 });
RemoveExpectValue(r, c, target[r][c]);
}
}
}
}

//去掉由于固定数字导致的该格子对应的行列宫其他格子对该数字的期待
public static void RemoveExpectValue(int rIndex, int cIndex, int value)
{
for (int r = 0; r < 9; r++)
{
for (int c = 0; c < 9; c++)
{
if (r == rIndex || c == cIndex || (r / 3 == rIndex / 3 && c / 3 == cIndex / 3))
{
sudoList[r][c].expectValueList[value - 1] = 0;
}
}
}
}

//开始递归检测
public static bool BeginCalculate(int index)
{
if (index >= 81) return true;

int r = index / 9;
int c = index % 9;

if (sudoList[r][c].isNormal)//是固定数直接跳下一个
{
return BeginCalculate(index + 1);
}

for (int v = 1; v <= 9; v++)
{
if (sudoList[r][c].expectValueList[v - 1] == 0) continue; //该数字不可用跳过

// 先判断数字可不可用,可用则先填到该格子,然后前往下一个格子
if (CheckNumbervalid(r, c, v))
{
sudoList[r][c].value = v;
if (BeginCalculate(index + 1)) return true;
}
}

//所有数字都不可用的话 重置为0 并返回上一层
sudoList[r][c].value = 0;
return false;
}

//检测某个格子是否可用某个数字
public static bool CheckNumbervalid(int rIndex, int cIndex, int value)
{
//行
for (int c = 0; c < 9; c++)
{
if (c != cIndex && sudoList[rIndex][c].value == value)
{
return false;
}
}

//列
for (int r = 0; r < 9; r++)
{
if (r != rIndex && sudoList[r][cIndex].value == value)
{
return false;
}
}

//宫
for (int g = rIndex / 3 * 3; g < rIndex / 3 * 3 + 3; g++)
{
for (int i = cIndex / 3 * 3; i < cIndex / 3 * 3 + 3; i++)
{
if (g != rIndex && i != cIndex && sudoList[g][i].value == value)
{
return false;
}
}
}

return true;
}
}

时间: 2024-08-25 09:10:59

数独暴力破解代码(code by unity)的相关文章

数独暴力遍历代码

还是递归大法好. #include <stdio.h> #include <stdlib.h> #include <assert.h> #define CELL_DEEP 3 #define MATRIX_DEEP 9 #define MATRIX_NUM (MATRIX_DEEP*MATRIX_DEEP) #define FULL_BITMAP 0x1FF #define TEST_BITMAP(bitmap, bit) (bitmap) & (1 <&

动网论坛密码暴力破解程序代码

我们通常这么写 using (SqlDataReader drm = sqlComm.ExecuteReader()) { drm.Read();//以下把数据库中读出的Image流在图片框中显示出来. MemoryStream ms = new MemoryStream((byte[])drm["Logo"]); Image img = Image.FromStream(ms); this.pictureBox1.Image = img; } 我的写数据 private void b

动网论坛password暴力破解程序代码

<% response.buffer=false '为防止程序陷入死循环,初始化一些最大重试值 Dim MaxPassLen,MaxPassAsc MaxPassLen=20 'password最大长度 MaxPassAsc=20 '==== 字符转换 Function bytes2BSTR(vIn) strReturn = "" For j = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn,j,1)) If ThisCharCode &

利用Teensy进行EM410x卡模拟以及暴力破解EM410X类门禁系统可行性猜想

前些天Open入手了Teensy++ 2.0,所以在无聊的情况下研究了Teensy++ 2.0模拟EM410X,并且针对EM410X的门禁进行了一次暴力破解测试,以下就是相关代码以及内容. 什么是低频?什么是EM410x? 首先,我不得不再次提一下那些工作在125khz频率下的低频卡(如:EM410X之类的),以便大家更好的阅读以下的内容. 什么是低频?以下就是低频的解释: 低频(LF, Low frequency)是指频带由30KHz到300KHz的无线电电波.一些无线电频率识别( RFID技

利用Python自动生成暴力破解的字典

Python是一款非常强大的语言.用于测试时它非常有效,因此Python越来越受到欢迎. 因此,在此次教程中我将聊一聊如何在Python中生成字典,并将它用于任何你想要的用途. 前提要求 1,Python 2.7(对于Python 3.x的版本基本相同,你只需要做一些微小调整) 2,Peace of mine(作者开的一个玩笑,这是一首歌名) 如果你用virtualenv搭建Python开发环境,请确保已经安装了itertools.因为我们将会用到itertools生成字典.我们将一步一步地演示

【初学破解】暴力破解绕过程序认证

最近在学习的时候有缘认识到了破解 为了能够略懂~花了点时间在这个上面做了点简单的破解实验~~ 下面将会介绍在破解程序中非常简单的一种破解方法----暴力破解~~~ 正文: ①编写漏洞程序 首先用c语言写了一个小bug程序 代码如下: #include <stdio.h> #include <windows.h> int main(){ int s=0; scanf("%d",&s); if(s == 8){ printf("注册成功!"

DVWA系列の命令注入&amp;暴力破解

Brute Force(暴力测试): 对比难度为Low和high的代码可以发现 相对于Low,High在用户名和密码处分别加了两个过滤函数 Stripslashes: 输入:字符串. 输出:返回一个去除转义反斜线后的字符串(\' 转换为 ' 等等).双反斜线(\\)被转换为单个反斜线(\). mysql_real_escape_string:以下字符前添加反斜杠: \x00, \n, \r, \, ', " 和 \x1a. 代码是用来防止sql注入代码,对暴力破解这一项并没有影响,只不过上面爆破

Python3小工具——暴力破解ssh

一.工具说明 利用pxssh库进行暴力破解ssh 二.演示一下的利用效果 三.代码+注释 from pexpect import pxssh import argparse import threading maxConnetions = 5 connect_lock = threading.BoundedSemaphore(value=maxConnetions) def connect(host, user, password):     try:         s = pxssh.pxs

Wordpress xmlrpc.php暴力破解漏洞

Wordpress xmlrpc.php暴力破解漏洞 wordpress是很流行的开源博客,它提供远程发布文章的方法,就是使用跟路径的xmlrpc.php这个文件,最近爆出xmlrpc漏洞,漏洞原理是通过xmlrpc进行认证,即使认证失败,也不会被Wordpress安装的安全插件记录,所以不会触发密码输错N次被锁定的情况.因此就可能被暴力破解,如果密码又是弱口令的话,就相当危险了.最简单的解决办法,就是删除xmlrpc.php这个文件.闲来无事,用java写了暴力破解的脚本,其实就是拿着各种用户