日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数独问题流程图_算法实践——数独的基本解法

發布時間:2023/12/10 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数独问题流程图_算法实践——数独的基本解法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數獨(Sudoku)是一種運用紙、筆進行演算的邏輯游戲。玩家需要根據9×9盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個粗線宮內的數字均含1-9,不重復。 每一道合格的數獨謎題都有且僅有唯一答案,推理方法也以此為基礎,任何無解或多解的題目都是不合格的。

如下圖所示,就是一個數獨的題目

關于數獨的詳細介紹,參看“百度百科——數獨”

數獨的基本解法就是利用規則的摒棄法

一些定義

每一行稱為數獨的行,每一列稱為數獨的列,每一個小九宮格稱為數獨的宮。數獨的基本規則就是每一行、每一列、每一宮中,1-9這9個數字都只出現一次。

用(行,列)表示上圖的單元格,例如(1,1)表示第一行第一列的單元格,(2,4)表示第二行第四列的單元格

如上圖,每個空白單元格中能填的數字都是有限制的。

例如:(1,1)就只能填7和8;而(6,4),只能填8;

那些只能填一個數字的空白單元格,我們稱之為唯一數單元格,上圖中(6,4)就是唯一數單元格

解題的順序,就是從唯一數單元格開始,由于唯一數單元格只能填一個數,故先在這個單元格里填數。在這個單元格里填數,由于規則的定義,那么這個單元格所在的行、所在的列、所在的宮的其他單元格就不能再填這個數了。這些單元格能填的數的可能性就少了。有可能會產生新的唯一數單元格。

在相當的一些的數獨題目中,從唯一數單元格開始填數,不停的在唯一數單元格填數就可以把數獨解出來。

如果在解題的過程中,發現某些空白單元格沒有數字能填這樣的單元格稱之為無解單元格,那就說明:要么這個數獨沒有解;要么之前的解題過程有問題,需要返回檢查之前的解題過程查看。

但是還有不少的數獨的題目,在解題的過程中,在還有空白單元格的情況下,卻找不到唯一數單元格,也就是意味著每個空白單元格中能填的數字至少有2個。我們稱之為無唯一數單元格的狀況

這個時候怎么辦?我們找到其中一個可能數最少的空白單元格(這個沒有定論,可以是可能數最少的空白單元格;也可以是第一個空白單元格;也可以是可能數最多的空白單元格,選哪個空白單元格對后面的解題是否有影響,沒有證明過,不好妄下定論。憑感覺選可能數最少的空白單元格是最好的選擇),由于能填的數字不止一個,先把當前的狀態保存起來,再在能選的數字中選擇一個數字填寫(從小到大選擇),然后繼續求解下去。如果能解出最后的結果,說明當前的選擇是正確的;如果后面的求解過程有問題,說明當前的數字的選擇有問題,那么再挑選另一個數填寫,繼續求解。如果,所有的選擇都求不出最后的結果,還是說明:要么這個數獨沒有解;要么之前的解題過程有問題,需要返回檢查之前的解題過程查看。如此反復,直到求出最終的答案。

會有種極端的情況(可能性不大)。那就是在當前的空白單元格的所有可能的數字都選擇了一遍,都沒有解。而之前又沒有出現無唯一數單元格的狀況。那就說明這個數獨根本就沒有解

下圖是數獨求解的流程圖

下面談談該算法的具體實現

1、數獨狀態的表示

用計算機來求解數獨。基本的一點就是如何表示數獨的狀態。

用整形一維數組來表示數獨的狀態

用Num(80)表示數獨的狀態(數組的下標從0開始),數獨是一個二維表格,而數組是一維數組。那么就存在一維和二維之間的轉換

一維數組的下標Index(小標從0開始)和二維下標X、Y(下標從0開始)之間的轉換公式

一維到二維的轉換

X=Int(Index/9)

Y=Index mod 9

二維到一維的轉換

Index=X*9+Y

數組中的每個整數表示數獨對應的單元格的狀態

正數表示空白單元格能填的數的組合,用二進制表示。用位來表示該單元格是否能填相應的數字,1表示能填,0表示不能填。

如文章開始的數獨的單元格(1,1)可能填7和8,則第7位和第8位上是1(位數是從后往前數),其余位都是0,用整數表示就是Num(0)=0110000002=192

每在單元格中填一個數字,則把相應的行、列、宮中其余的單元格把該數字去掉。

我們可以充分利用位運算來簡化去數字的過程。如:要把單元格去掉7這個數字的可能。首先7對應的二進制位0010000002,取其反數得到1101111112,再和目標單元格的數值進行AND的位運算,來實現去除該單元格7這個數字的可能性(由于位運算的便捷,不需要考慮該單元格是否原本包含7這個數字的可能性)。

如:(1,1)=0110000002 AND 1101111112=0100000002,去除7這個可能性,只剩8這個可能性了,也就是成為唯一數單元格

再比如:(1,9)=0100000102 AND 1101111112=0100000102,原本單元格就沒有7這個可能性,執行位運算后,還是原來的可能性,沒有發生變化。

負數表示該單元格已經確定的數,例如:(1,2)=-6,表示該單元格已近填了數字6

0表示該單元格既沒有填確定的數字,也沒有可填數的可能性。也就是上文說的無解單元格

為了算法中計算的方便,事先把這些二進制數都緩存起來,用一個一維的數組表示

用數組V來表示各個位對應的數字

V(0)=0000000012=1

V(1)=0000000102=2

V(2)=0000001002=4

V(3)=0000010002=8

V(4)=0000100002=16

V(5)=0001000002=32

V(6)=0010000002=64

V(7)=0100000002=128

V(8)=1000000002=256

V(9)=1111111112=511

數字7對應的二進制數為V(6)=0010000002=64,7的反數為V(9)-V(6)=1101111112=447

每個單元格初始的值都是V(9)=1111111112=511

2、如何獲得一個單元格的可填數的個數

由于是用二進制來表示單元格的狀態,那么可填數的個數就是該數字中1的個數。我們之前有一個很方便的方法快速計算一個數中1的個數,參看算法的強大——快速計算一個正二進制整數中包含多少個1。

3、狀態的緩存

依據之前的說法,在碰到無唯一數單元格的情況時,要把當前的狀態緩存起來。考慮到實際情況,從算法的角度上來說,用棧(先進后出)這個數據結構來實現比較合適。可以自己寫一個棧的實現。但是,目前很多的編程語言都實現了基本的數據結構,提供了基本的數據結構的類和方法供我們調用。

以Visual Studio為例,它有Stack這個類,實現了棧的基本操作。有兩個棧的方法:Push(壓棧)——把數據寫到棧里面;Pop(出棧)——把數據從棧里提出來,并刪除棧中的數據。

4、代碼說明

基本的變量

Private _Num(80) As?Integer

Private _V(9) As?Integer

Private _S As System.Text.StringBuilder

Private _HasString As?Boolean

_Num數組表示數獨的狀態;_V數組是輔助數組,緩存常用的二進制數

_S是一個文本對象,保存數獨求解的過程;_HasString是個開關變量,表示是否記錄求解過程;這兩個變量是輔助變量,僅僅起到記錄的作用。

類的初始化

Public?Sub?New(Optional?ByVal HasString As?Boolean = True)

Dim I As?Integer

_V(0) = 1

For I = 1 To 8

_V(I) = _V(I - 1) * 2

Next

_V(9) = 511

For I = 0 To 80

_Num(I) = _V(9)

Next

_S = New System.Text.StringBuilder

_HasString = HasString

End?Sub

代碼的前半段生成V這個數組,_V(9)=511。后半段,初始化數獨數組。由于是空白數獨數組,故每個單元格的值都是_V(9)

在給定的單元格里移除某個數字的可能性代碼

Private?Function RemoveNum(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num2 As?Integer) As?Integer

Dim Index As?Integer = Row * 9 + Col

If _Num(Index) > 0 Then _Num(Index) = _Num(Index) And Num2

Return _Num(Index)

End?Function

3個參數,Row表示行,Col表示列(都是下標從0開始),Num2表示要去除的數的反碼,以二進制表示。

例如:在(1,1)這個單元格去除7這個可能性,則調用RemoveNum(0,0,1101111112)

返回值是該單元格的狀態值,如果返回0,表示該單元就成了無解單元格,要后面的代碼做適當的處理

在給定的單元格填某個數的代碼

Private?Function SetNumPri(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num As?Integer) As?Boolean

If (_V(Num) And _Num(Row * 9 + Col)) = 0 Then?Return?False

_Num(Row * 9 + Col) = -(Num + 1)

Num = _V(9) - _V(Num)

Dim I As?Integer, J As?Integer

For I = 0 To 8

If RemoveNum(I, Col, Num) = 0 Then?Return?False

If RemoveNum(Row, I, Num) = 0 Then?Return?False

Next

Dim R1 As?Integer = Int(Row / 3) * 3

Dim C1 As?Integer = Int(Col / 3) * 3

For I = R1 To R1 + 2

For J = C1 To C1 + 2

If RemoveNum(I, J, Num) = 0 Then?Return?False

Next

Next

Return?True

End?Function

3個參數,Row表示行,Col表示列,Num表示要填充的數字(下標從0開始),這個方法是供類內部調用,從程序的角度來說,程序處理下標,從0開始比從1開始要來得簡單。

例如:在(1,1)中填入數字7,則調用SetNumPri(0,0,6)

代碼的第1行,先利用位運算判斷當前單元格能否填制定的數字,不能填返回False

代碼的第2行,設置當前單元格為指定數字,之前說了,用負數表示已填好的數字

代碼的第3行,獲得當前數字的反碼,為后面去除該單元格所在的行、列、宮的其他單元格的該數字做準備

后面有兩個循環,第一個循環去除行、列的其他單元格的該數字;第二個雙循環去除宮的其他單元格的該數字。在調用RomoveNum方法時,若返回的是0,說明產生了無解單元格,那說明在這個單元格填該數字是不合理的,故返回False

當全部的代碼都能順利完成了,說明這個單元格填該數字是合理的,返回True

該方法的另一個重載形式

Private?Function SetNumPri(ByVal Index As?Integer, ByVal Num2 As?Integer) As?Boolean

Dim Row As?Integer = Int(Index / 9)

Dim Col As?Integer = Index Mod 9

Dim I As?Integer

For I = 0 To 8

If _V(I) = Num2 Then?Exit For

Next

Return SetNumPri(Row, Col, I)

End?Function

這也是一個供內部調用的方法,兩個參數,Index是一維數組的下標;Num2是數字的二進制的形式。整個方法就是參數的轉換,然后調用之前的方法

下面是兩個供外面調用的方法

Public?Function SetNum(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num As?Integer) As?Boolean

Return SetNumPri(Row - 1, Col - 1, Num - 1)

End?Function

Public?Function SetLine(ByVal Row As?Integer, ByVal?ParamArray Num() As?Integer) As?Boolean

If Num.Length = 0 Then?Return?True

Dim I As?Integer

For I = 0 To IIf(Num.Length - 1 > 8, 8, Num.Length - 1)

If Num(I) > 0 AndAlso SetNumPri(Row - 1, I, Num(I) - 1) = False?Then?Return?False

Next

Return?True

End?Function

第一個方法是公開給外部調用的填數的方法。對外來說,從直觀性上來說,下標是從1開始比較合適,但是內部的方法從0開始比較好。

如在(1,1)填7,調用SetNum(1,1,7),這個方法轉而調用SetNumPri(0,0,6)

這個方法一般用在初始化數獨時候調用

第二個方法也是公開給外部的方法,一次填寫一行數的方法,如果是空白單元格,則用0替代

如本文開始的數獨,填寫第一行代碼就是SetLine(1,0,6,0,5,9,3,0,0,0)

幾個輔助方法

Private?Sub RestoreNum(ByVal L As?List(Of?Integer))

Dim I As?Integer

For I = 0 To 80

_Num(I) = L.Item(I)

Next

AppendString("Restore Matrix")

End?Sub

恢復L中的數據到數獨數組中,L是之前緩存的數據。AppendString這個方法是將數據記錄到文本對象

Private?Function Get1Count(ByVal Value As?Integer) As?Integer

Dim C As?Integer = 0

Do?While Value > 0

Value = Value And (Value - 1)

C += 1

Loop

Return C

End?Function

獲得一個數中1的個數,也就是獲得一個空白單元格的可填數的數目

例如:(1,1)=0110000002,Get1Count(0110000002)=2,說明(1,1)這個單元格能填2個數

Private?Function GetIndexOfNum(ByVal Num As?Integer, ByVal Index As?Integer) As?Integer

Dim I As?Integer, K As?Integer = 0

For I = 0 To 8

If (_V(I) And Num) <> 0 Then

K += 1

If K = Index Then?Return I + 1

End?If

Next

Return -1

End?Function

獲得指定數Num(二進制形式)的第Index個的可填數

還是以上面的為例,(1,1)=0110000002,

GetIndexOfNum(0110000002,1)=7,表示第1個可填數是7

GetIndexOfNum(0110000002,2)=8,表示第2個可填數是8

GetIndexOfNum(0110000002,3)=-1,表示沒有第3個可填數

輔助記錄函數

這些函數對求解算法沒啥太大的幫助,僅僅是將求解的過程記錄到文本中,以供日后研究參考

Private?Function ReturnNumString(ByVal Num As?Integer) As?String

If Num < 0 Then?Return?"#" & (-Num) & " "

Dim I As?Integer, S As?String = ""

For I = 0 To 8

If (_V(I) And Num) <> 0 Then S &= (I + 1)

Next

Return S.PadRight(10)

End?Function

返回一個數字的文本格式,如果是空白單元格,返回該單元格的所有可填數;如果是已填單元格,返回#+數字的字符串。返回的字符串經過對齊處理。

Private?Function ReturnMatrix() As?String

Dim I As?Integer, J As?Integer, S As?String = ""

For I = 0 To 8

For J = 0 To 8

S &= ReturnNumString(_Num(I * 9 + J))

Next

S &= vbNewLine

Next

Return S

End?Function

返回整個數獨的狀態文本

Private?Sub AppendString(ByVal Text As?String, Optional?ByVal AppendMatrix As?Boolean = True)

If _HasString = False?Then?Exit Sub

_S.AppendLine(Text)

_S.AppendLine()

If AppendMatrix = True?Then

_S.AppendLine(ReturnMatrix)

_S.AppendLine()

End?If

End?Sub

將文本添加到文本對象,并根據AppendMatrix參數來決定是否將整個數獨的狀態添加到文本對象

Private?Function IndexToXY(ByVal Index As?Integer) As?String

Return (Int(Index / 9) + 1) & "-" & (Index Mod 9 + 1) & " Num:" & -_Num(Index)

End?Function

返回指定Index的坐標和已填的數,用于在文本對象中

Public?Function CalculationString() As?String

Return _S.ToString

End?Function

對外公開的方法,返回文本對象,也就是之前記錄的求解過程,共日后研究參考

主求解函數——算法的核心

下面的3個函數是算法的核心

Private?Function FindMinCell() As?Integer

Dim I As?Integer, C As?Integer

Dim tP As?Integer = -1, tMin As?Integer = 20

I = 0

Do

If _Num(I) > 0 Then

C = Get1Count(_Num(I))

If C = 1 Then

If SetNumPri(I, _Num(I)) = False?Then?Return -2

AppendString("SetNum " & IndexToXY(I))

If I = tP Then

tP = -1

tMin = 20

End?If

I = -1

Else

If C < tMin Then

tP = I

tMin = C

End?If

End?If

End?If

I += 1

Loop?Until I > 80

Return tP

End?Function

該函數是獲得最少可能數的單元格(可填數大于2的空白單元格)

該函數返回值有3個可能性

返回值:-1,沒有找到這樣的單元格,函數從某個唯一數單元格開始填數,依次填下去,并且把所有的空白單元格都填滿。這說明,求解結束。

返回值:-2,沒有找到這樣的單元格,函數從某個唯一數單元格開始填數,依次填下去,產生了無解單元格。說明之前的求解過程有錯誤或者說該數獨無解

返回值:0-80,找到這樣的單元格,并且當前的數獨數組中不再存在唯一數單元格(函數直接會在唯一數單元格上填數)

Public?Function Calculate() As?Integer()

Dim I As?Integer

Dim K As?Integer

Dim Q As?New?Stack(Of?List(Of?Integer))

Dim L As?List(Of?Integer)

_S = New System.Text.StringBuilder

AppendString("Init Matrix")

K = FindMinCell()

Do?While K <> -1

If K = -2 Then

If Q.Count = 0 Then

AppendString("Error!!!!!", False)

Return?Nothing

End?If

L = Q.Pop

K = L(82)

L.RemoveAt(82)

I = L(81) + 1

L.RemoveAt(81)

AppendString("Stack Pop " & Q.Count + 1, False)

RestoreNum(L)

K = FindNextK(Q, L, K, I)

Else

L = New?List(Of?Integer)

L.AddRange(_Num)

K = FindNextK(Q, L, K, 1)

End?If

Loop

AppendString("Calculating Complete!!!!")

Dim V(80) As?Integer

For I = 0 To 80

V(I) = -_Num(I)

Next

Return V

End?Function

對外公開的主求解函數,返回最終結果的整形數組

首先解釋一下棧對象Q,由于棧Q每次壓棧的時候只能壓一個對象,而當出現無唯一數單元格的情況的時候,需要將當前的數據緩存起來。需要緩存的內容有三個部分,分別是數獨數組、找到的最少可能數的單元格的下標、最少可能數的單元格的選擇填的第幾個數。故用一個List(of Integer)對象將之前的三個內容緩存起來。L(0)—L(80)表示是數獨數組,L(81)是最少可能數的單元格的下標,L(82)是最少可能數的單元格的選擇填的第幾個數。

該函數的主要是判斷K的值,如上個函數所述,K的值主要有3種

K=-1,說明沒有空白單元格,數獨已經完美的求解完成,直接返回結果

K=-2,說明有無解單元格,那么判斷棧Q中的數據,如果棧Q中沒有數據,說明該數獨無解;如果棧Q中有數據,那么把數據提出來,把數獨的狀態恢復到之前的情況。并從上次緩存的最少可能數單元格中,提取下一個可填數去繼續進行嘗試。

舉例說明,緩存了0,1。說明上次嘗試的是第1個單元格(下標從0開始)的第1個可填數。由于出現了無解單元格,說明第1個可填數是不正確的,那么繼續嘗試第2個可填數。調用的方法:FindNextK(Q, L, K, I),之前I已經加過1了。

K=0-80,得到最少可能數的單元格的下標。從該單元格的第1個可填數開始嘗試。調用的方法:FindNextK(Q, L, K, 1)

嘗試可能數的函數是FindNextK,返回值也是分為3種,-1、-2、0-80。意義和上面一樣

Private?Function FindNextK(ByVal Q As?Stack(Of?List(Of?Integer)), ByVal L As?List(Of?Integer), ByVal K As?Integer, ByVal Index As?Integer) As?Integer

Dim J As?Integer = GetIndexOfNum(_Num(K), Index)

Do?While J <> -1

If SetNumPri(K, _V(J - 1)) = True?Then

AppendString("Stack Push " & Q.Count + 1, False)

AppendString("SetNum MayBe " & IndexToXY(K))

L.Add(Index)

L.Add(K)

Q.Push(L)

K = FindMinCell()

Exit Do

End?If

RestoreNum(L)

Index += 1

J = GetIndexOfNum(_Num(K), Index)

Loop

If J = -1 Then K = -2

Return K

End?Function

輔助函數,獲得嘗試可能數的結果

首先,通過GetIndexOfNum獲得當前可填數。如果返回值-1的話,說明當前已經沒有可填數,出現無解單元格,直接返回值為-2

然后嘗試在當前單元格填數,調用SetNumPri(K, _V(J - 1)),返回True表示該數能填,那么把當前的狀態緩存到棧Q中,并通過FindMinCell函數獲得下一個可能的K值,并返回;返回False表示該數不能填,恢復數據到數獨數組,繼續嘗試下一個數。

至此該算法類的代碼都說明完整了

在該算法中僅僅用了最基本的解法——摒除法。遇見唯一數單元格,就直接填數,如果遇見無唯一數單元格,則緩存數據,并對該單元格的所有可填數做嘗試,直到求解出該數獨為止。

會有人疑問,利用棧Q緩存數據,會不會極大的占用系統資源,導致無法解題的情況。以目前的情況來看,我用該算法求解了“程序員們都是不被世人所理解的真正天才嗎?-請大家看這個數獨的解法”中的號稱最難的數獨,并把求解的結果保存到文件后打開分析了一下,發現棧Q的緩存不超過20步,以20步為例,每步83*4字節,則一共20*83*4=6640字節<7K字節。遠小于系統的承受能力。因此,不必擔心系統的承受能力

如果,誰有好的數獨的算法,歡迎交流,不吝賜教。

讓我們實戰看看成果,用該算法求解本文開頭的數獨,代碼如下:

Dim tS As New clsSudoku

tS.SetLine(1, 0, 6, 0, 5, 9, 3, 0, 0, 0)

tS.SetLine(2, 9, 0, 1, 0, 0, 0, 5, 0, 0)

tS.SetLine(3, 0, 3, 0, 4, 0, 0, 0, 9, 0)

tS.SetLine(4, 1, 0, 8, 0, 2, 0, 0, 0, 4)

tS.SetLine(5, 4, 0, 0, 3, 0, 9, 0, 0, 1)

tS.SetLine(6, 2, 0, 0, 0, 1, 0, 6, 0, 9)

tS.SetLine(7, 0, 8, 0, 0, 0, 6, 0, 2, 0)

tS.SetLine(8, 0, 0, 4, 0, 0, 0, 8, 0, 7)

tS.SetLine(9, 0, 0, 0, 7, 8, 5, 0, 1, 0)

tS.Calculate()

My.Computer.FileSystem.WriteAllText("1.txt", tS.CalculationString, False)

該數獨還是比較簡單的,一路唯一數單元格到底

結果如下:

Calculating Complete!!!!

#7??????? #6??????? #2??????? #5??????? #9??????? #3??????? #1??????? #4??????? #8

#9??????? #4??????? #1??????? #2??????? #7??????? #8??????? #5??????? #3??????? #6

#8??????? #3??????? #5??????? #4??????? #6??????? #1??????? #7??????? #9??????? #2

#1??????? #9??????? #8??????? #6??????? #2??????? #7??????? #3??????? #5??????? #4

#4??????? #7??????? #6??????? #3??????? #5??????? #9??????? #2??????? #8??????? #1

#2??????? #5??????? #3??????? #8??????? #1??????? #4??????? #6??????? #7??????? #9

#3??????? #8??????? #7??????? #1??????? #4??????? #6??????? #9??????? #2??????? #5

#5??????? #1??????? #4??????? #9??????? #3??????? #2??????? #8??????? #6??????? #7

#6??????? #2??????? #9??????? #7??????? #8??????? #5??????? #4??????? #1??????? #3

下面是該算法類的完整代碼

Public?Class?clsSudoku

Private _Num(80) As?Integer

Private _V(9) As?Integer

Private _S As System.Text.StringBuilder

Private _HasString As?Boolean

Public?Sub?New(Optional?ByVal HasString As?Boolean = True)

Dim I As?Integer

_V(0) = 1

For I = 1 To 8

_V(I) = _V(I - 1) * 2

Next

_V(9) = 511

For I = 0 To 80

_Num(I) = _V(9)

Next

_S = New System.Text.StringBuilder

_HasString = HasString

End?Sub

Private?Function Get1Count(ByVal Value As?Integer) As?Integer

Dim C As?Integer = 0

Do?While Value > 0

Value = Value And (Value - 1)

C += 1

Loop

Return C

End?Function

Private?Function RemoveNum(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num2 As?Integer) As?Integer

Dim Index As?Integer = Row * 9 + Col

If _Num(Index) > 0 Then _Num(Index) = _Num(Index) And Num2

Return _Num(Index)

End?Function

Public?Function SetNum(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num As?Integer) As?Boolean

Return SetNumPri(Row - 1, Col - 1, Num - 1)

End?Function

Public?Function SetLine(ByVal Row As?Integer, ByVal?ParamArray Num() As?Integer) As?Boolean

If Num.Length = 0 Then?Return?True

Dim I As?Integer

For I = 0 To IIf(Num.Length - 1 > 8, 8, Num.Length - 1)

If Num(I) > 0 AndAlso SetNumPri(Row - 1, I, Num(I) - 1) = False?Then?Return?False

Next

Return?True

End?Function

Private?Function SetNumPri(ByVal Row As?Integer, ByVal Col As?Integer, ByVal Num As?Integer) As?Boolean

If (_V(Num) And _Num(Row * 9 + Col)) = 0 Then?Return?False

_Num(Row * 9 + Col) = -(Num + 1)

Num = _V(9) - _V(Num)

Dim I As?Integer, J As?Integer

For I = 0 To 8

If RemoveNum(I, Col, Num) = 0 Then?Return?False

If RemoveNum(Row, I, Num) = 0 Then?Return?False

Next

Dim R1 As?Integer = Int(Row / 3) * 3

Dim C1 As?Integer = Int(Col / 3) * 3

For I = R1 To R1 + 2

For J = C1 To C1 + 2

If RemoveNum(I, J, Num) = 0 Then?Return?False

Next

Next

Return?True

End?Function

Private?Function SetNumPri(ByVal Index As?Integer, ByVal Num2 As?Integer) As?Boolean

Dim Row As?Integer = Int(Index / 9)

Dim Col As?Integer = Index Mod 9

Dim I As?Integer

For I = 0 To 8

If _V(I) = Num2 Then?Exit For

Next

Return SetNumPri(Row, Col, I)

End?Function

Private?Function FindMinCell() As?Integer

Dim I As?Integer, C As?Integer

Dim tP As?Integer = -1, tMin As?Integer = 20

I = 0

Do

If _Num(I) > 0 Then

C = Get1Count(_Num(I))

If C = 1 Then

If SetNumPri(I, _Num(I)) = False?Then?Return -2

AppendString("SetNum " & IndexToXY(I))

If I = tP Then

tP = -1

tMin = 20

End?If

I = -1

Else

If C < tMin Then

tP = I

tMin = C

End?If

End?If

End?If

I += 1

Loop?Until I > 80

Return tP

End?Function

Public?Function Calculate() As?Integer()

Dim I As?Integer

Dim K As?Integer

Dim Q As?New?Stack(Of?List(Of?Integer))

Dim L As?List(Of?Integer)

_S = New System.Text.StringBuilder

AppendString("Init Matrix")

K = FindMinCell()

Do?While K <> -1

If K = -2 Then

If Q.Count = 0 Then

AppendString("Error!!!!!", False)

Return?Nothing

End?If

L = Q.Pop

K = L(82)

L.RemoveAt(82)

I = L(81) + 1

L.RemoveAt(81)

AppendString("Stack Pop " & Q.Count + 1, False)

RestoreNum(L)

K = FindNextK(Q, L, K, I)

Else

L = New?List(Of?Integer)

L.AddRange(_Num)

K = FindNextK(Q, L, K, 1)

End?If

Loop

AppendString("Calculating Complete!!!!")

Dim V(80) As?Integer

For I = 0 To 80

V(I) = -_Num(I)

Next

Return V

End?Function

Private?Sub RestoreNum(ByVal L As?List(Of?Integer))

Dim I As?Integer

For I = 0 To 80

_Num(I) = L.Item(I)

Next

AppendString("Restore Matrix")

End?Sub

Private?Function GetIndexOfNum(ByVal Num As?Integer, ByVal Index As?Integer) As?Integer

Dim I As?Integer, K As?Integer = 0

For I = 0 To 8

If (_V(I) And Num) <> 0 Then

K += 1

If K = Index Then?Return I + 1

End?If

Next

Return -1

End?Function

Private?Function FindNextK(ByVal Q As?Stack(Of?List(Of?Integer)), ByVal L As?List(Of?Integer), ByVal K As?Integer, ByVal Index As?Integer) As?Integer

Dim J As?Integer = GetIndexOfNum(_Num(K), Index)

Do?While J <> -1

If SetNumPri(K, _V(J - 1)) = True?Then

AppendString("Stack Push " & Q.Count + 1, False)

AppendString("SetNum MayBe " & IndexToXY(K))

L.Add(Index)

L.Add(K)

Q.Push(L)

K = FindMinCell()

Exit Do

End?If

RestoreNum(L)

Index += 1

J = GetIndexOfNum(_Num(K), Index)

Loop

If J = -1 Then K = -2

Return K

End?Function

Private?Function ReturnNumString(ByVal Num As?Integer) As?String

If Num < 0 Then?Return?"#" & (-Num) & " "

Dim I As?Integer, S As?String = ""

For I = 0 To 8

If (_V(I) And Num) <> 0 Then S &= (I + 1)

Next

Return S.PadRight(10)

End?Function

Private?Function ReturnMatrix() As?String

Dim I As?Integer, J As?Integer, S As?String = ""

For I = 0 To 8

For J = 0 To 8

S &= ReturnNumString(_Num(I * 9 + J))

Next

S &= vbNewLine

Next

Return S

End?Function

Private?Sub AppendString(ByVal Text As?String, Optional?ByVal AppendMatrix As?Boolean = True)

If _HasString = False?Then?Exit Sub

_S.AppendLine(Text)

_S.AppendLine()

If AppendMatrix = True?Then

_S.AppendLine(ReturnMatrix)

_S.AppendLine()

End?If

End?Sub

Private?Function IndexToXY(ByVal Index As?Integer) As?String

Return (Int(Index / 9) + 1) & "-" & (Index Mod 9 + 1) & " Num:" & -_Num(Index)

End?Function

Public?Function CalculationString() As?String

Return _S.ToString

End?Function

End?Class

總結

以上是生活随笔為你收集整理的数独问题流程图_算法实践——数独的基本解法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久草在线视频资源 | 91av视频网站 | av动态图片| 美女免费黄网站 | 99精品在线免费视频 | 亚洲一级免费电影 | 久久香蕉影视 | 免费高清在线一区 | 国产精品一区二区无线 | 精品一二区| 99热精品久久 | 91人网站| 69av在线视频 | 国产精品久久久久久五月尺 | 亚洲在线网址 | 婷婷网五月天 | 黄色av一区二区 | 国产亚洲精品美女 | av片子在线观看 | 国产日本在线播放 | 亚洲精品国产精品国自产 | 久久噜噜少妇网站 | 欧美aaa视频 | 亚洲成人软件 | 在线观看成人毛片 | 娇妻呻吟一区二区三区 | 精品久久久亚洲 | 伊人五月 | 中文字幕色婷婷在线视频 | 亚洲精品乱码久久 | 国产精品第一视频 | 亚洲天堂视频在线 | 日韩网站中文字幕 | 色99中文字幕| 高清不卡一区二区三区 | 日韩欧美高清在线观看 | 又黄又刺激的网站 | www久久精品| 99久久www免费 | 久久久精品视频网站 | 欧美日韩高清不卡 | 在线看中文字幕 | 五月婷婷天堂 | 免费毛片一区二区三区久久久 | 高清不卡毛片 | 韩国精品一区二区三区六区色诱 | 中文在线免费视频 | 四虎成人精品在永久免费 | 黄视频色网站 | av免费在线网站 | 天天操天天干天天干 | 久久久受www免费人成 | 91漂亮少妇露脸在线播放 | 国产精品精品久久久久久 | 看全黄大色黄大片 | 波多野结衣一区二区三区中文字幕 | 99视频精品免费观看, | 日本精品二区 | 天天综合色天天综合 | 中文字幕精品三区 | 丝袜美女在线观看 | 黄色网免费 | 日韩欧美69 | 日本久久久久久久久 | av中文电影 | 国产日本亚洲 | 成年人免费看 | 日韩欧美极品 | 国产中文字幕一区 | 成人avav | 午夜精品久久久久久久久久久 | 夜夜操网站 | 久久综合九色综合97_ 久久久 | 91x色| 美女免费黄视频网站 | 天天玩天天干天天操 | 亚洲国产精久久久久久久 | 黄色免费国产 | 日韩免费网址 | 伊人天天操 | 丁香婷婷电影 | 久草视频在线播放 | 国产一区视频免费在线观看 | 日韩av中文字幕在线免费观看 | 成人免费大片黄在线播放 | 成人亚洲综合 | 狠狠干免费 | 在线精品观看国产 | 日韩精品一区二区三区丰满 | 国产免费成人av | 一级片免费观看 | 人人揉人人揉人人揉人人揉97 | 欧美日韩精品电影 | .国产精品成人自产拍在线观看6 | 欧美ⅹxxxxxx | 免费a v网站 | 日本中文在线观看 | 国产高清视频色在线www | 久久久久久久久久久高潮一区二区 | 亚洲色图27p| 2021国产在线视频 | 波多野结衣视频一区二区三区 | 99热这里有 | 在线天堂中文www视软件 | 欧美日韩免费在线观看视频 | 日韩中文字幕免费在线播放 | 亚洲一区日韩在线 | 国产精品高清免费在线观看 | 久久久久久中文字幕 | 人人爽人人爽人人片 | 久久99在线观看 | 久久午夜精品视频 | 久久久久久久久久久久电影 | 51久久夜色精品国产麻豆 | 免费黄色网址大全 | 亚洲国产精品视频 | 91成人看片 | 免费精品视频 | 国产美腿白丝袜足在线av | 婷婷香蕉 | 国产一级二级视频 | av福利在线播放 | 日韩av一区二区在线影视 | 婷婷播播网 | 精品九九九 | 在线视频1卡二卡三卡 | 欧美日韩免费在线视频 | 精品一二三区视频 | 99视频免费 | 2019中文最近的2019中文在线 | 久久久久久欧美二区电影网 | 久草在线国产 | 亚洲第一av在线播放 | 在线观看黄色小视频 | 免费av视屏 | 在线观看免费av网 | 丁香影院在线 | japanese黑人亚洲人4k | 日韩av片在线 | 96精品高清视频在线观看软件特色 | 91视频 - 114av | 国产福利在线不卡 | 国产黄色看片 | 91av看片| 亚洲精品自在在线观看 | 国产精品剧情 | 狠狠色香婷婷久久亚洲精品 | 日韩免费视频线观看 | 97碰碰视频 | 五月天免费网站 | 在线播放 日韩专区 | 日韩区在线观看 | 国产午夜精品理论片在线 | 狠狠色丁香九九婷婷综合五月 | 人人看人人艹 | 综合网欧美 | 久草精品视频在线播放 | 在线免费成人 | 午夜视频二区 | 91在线日韩 | 欧洲精品码一区二区三区免费看 | www.av免费 | 欧美综合国产 | 91精品久久久久久综合五月天 | 久久久精华网 | 久久精品国产免费观看 | jizz999| 国产成人免费在线 | 91av在线播放视频 | 四虎在线免费观看 | 人人揉人人揉人人揉人人揉97 | 色a综合 | 99情趣网视频 | 波多野结衣在线观看视频 | 天天做综合网 | 色在线网站| 福利二区视频 | 国产精品毛片久久蜜 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 色射色| 日韩av免费在线看 | 欧美精品999| 人人添人人| 日本黄色免费观看 | 亚洲国产色一区 | 亚洲成人av影片 | 国产精品18p | 最新中文字幕视频 | 久久综合久久综合久久 | 亚洲国产欧美在线人成大黄瓜 | 高清一区二区三区av | 欧洲亚洲激情 | 伊人五月婷 | 欧美一级久久 | 在线观看91网站 | 精品日本视频 | 久久婷婷色 | 精品国产伦一区二区三区 | 婷婷色 亚洲 | 97超碰人人澡人人 | 91在线看网站 | 亚洲精品成人av在线 | 国产精品av免费 | 亚洲欧美日韩精品一区二区 | 亚洲欧洲国产视频 | 91三级在线观看 | 久久免费视频网 | 亚洲激情在线观看 | 夜夜嗨av色一区二区不卡 | 天天操天天干天天综合网 | 日韩一区二区在线免费观看 | 91精品亚洲影视在线观看 | 香蕉在线视频观看 | 色av网站| 五月丁色 | 天天干天天天 | 中文字幕资源在线 | 午夜精品久久久久久中宇69 | 97人人添人澡人人爽超碰动图 | 黄网站a| 精品在线一区二区 | 夜夜躁狠狠躁日日躁 | 九色91在线视频 | 亚洲精品va| 新av在线| 精品国产精品久久一区免费式 | 一区 在线 影院 | 亚洲精品视频免费 | 久久久久婷 | 国产视频日韩视频欧美视频 | 欧美一级日韩免费不卡 | 日韩网站一区二区 | 麻豆久久精品 | 精品国产成人 | 九九综合九九综合 | 久久久久久国产一区二区三区 | 美女网站色 | 亚洲2019精品 | 国产黑丝一区二区 | 日韩欧美观看 | 国产精品高潮在线观看 | 激情中文在线 | 欧美一级在线观看视频 | 91在线精品秘密一区二区 | 99久热精品 | 亚洲免费高清视频 | 99 精品 在线 | 免费看黄的| 在线观看91精品国产网站 | 高清国产一区 | 日韩久久精品一区二区三区下载 | 区一区二区三区中文字幕 | 4438全国亚洲精品在线观看视频 | 久久国产麻豆 | 久久激情小说 | 日韩三级一区 | 免费福利在线 | 日本中文在线播放 | 国产.精品.日韩.另类.中文.在线.播放 | 久久 一区 | 亚洲第一av在线播放 | 91精品国产91久久久久久三级 | 国产999精品久久久久久麻豆 | 中文字幕资源在线 | 精品女同一区二区三区在线观看 | 五月天综合激情 | 免费一级片观看 | www.天天射| 亚洲精品久久久久999中文字幕 | 免费日韩在线 | 中文字幕国产视频 | jizzjizzjizz亚洲 | 在线观看视频在线 | 一区二区电影在线观看 | 国产黄色片久久 | 日韩成人免费在线 | 视频在线观看国产 | 黄色特级毛片 | 亚洲欧洲国产视频 | 最新av电影网站 | 精品久久免费看 | 免费av大全 | 91高清在线 | 国产精品欧美日韩在线观看 | 在线看片视频 | 黄色99视频 | 91探花国产综合在线精品 | 狠狠操电影网 | 久久久久| 97超级碰碰碰碰久久久久 | 人人看看人人 | 日p在线观看 | 五月婷婷丁香综合 | 久久久久久久久久久久电影 | 国产糖心vlog在线观看 | 亚洲免费色 | 中文字幕在线观看视频免费 | 波多野结衣电影久久 | av中文字幕电影 | 国产一级二级三级在线观看 | 亚洲一区二区三区四区精品 | 日韩两性视频 | 国产+日韩欧美 | 久久激情视频免费观看 | 91精品在线播放 | 日本黄色黄网站 | 久久午夜电影院 | av女优中文字幕在线观看 | 久久久久综合视频 | 婷婷av综合| 日韩系列在线观看 | 亚洲精品在线观看视频 | 亚洲欧美国产视频 | 深爱婷婷 | 97人人澡人人添人人爽超碰 | 亚洲综合涩 | 亚洲一本视频 | 久久99国产视频 | 999久久久 | 日产乱码一二三区别免费 | 特级黄色视频毛片 | 国产无套精品久久久久久 | 日韩精品极品视频 | 婷婷丁香色综合狠狠色 | 国产精品高清免费在线观看 | 久久99精品久久只有精品 | 国产成人免费在线 | 韩国av免费在线 | 午夜视频在线观看一区二区 | www.久草视频 | 五月婷婷免费 | 欧美激情精品久久久久久变态 | 久久深夜 | 在线免费观看黄网站 | 99久久精品久久亚洲精品 | 中文字字幕在线 | 日韩在线观看网站 | 国产黄色片免费观看 | 成人毛片一区二区三区 | 91少妇精拍在线播放 | 黄色三级免费网址 | 日本女人在线观看 | 国产精品一区二区在线免费观看 | 激情视频亚洲 | 久久欧美在线电影 | 日韩欧美在线观看一区二区 | 伊人天天干 | 深爱激情五月婷婷 | 色亚洲网 | 在线观看视频福利 | 婷婷丁香激情网 | 日韩成人免费电影 | 国产小视频免费观看 | 国产首页| 91九色视频国产 | 色综合久久久久久中文网 | 开心激情婷婷 | 在线观看免费av网 | 精品国产免费一区二区三区五区 | 99人久久精品视频最新地址 | 亚洲激情在线视频 | 97日日碰人人模人人澡分享吧 | 性色va| 亚洲成人网在线 | 欧美激情视频在线观看免费 | 精品国内 | 天天色天天射天天综合网 | 国产成人精品av久久 | 亚洲视频aaa | 久久久久www | 中文字幕 国产视频 | 久久综合日 | 91中文字幕视频 | 91亚洲精品乱码久久久久久蜜桃 | 六月色丁| 国产高清在线视频 | 久久字幕 | 亚洲一级二级 | 久久综合五月天 | 69亚洲视频 | 中文字幕在线观看视频网站 | 亚洲国产成人久久 | 青青久草在线 | 国产精品免费大片视频 | 狠狠的操你 | 黄色一级性片 | 久久视频这里有久久精品视频11 | 在线观看国产福利片 | 国产中文字幕在线视频 | 国产精品高清免费在线观看 | 亚洲精品在线播放视频 | 色综合天天做天天爱 | 日本久久视频 | 国产原创在线视频 | 在线婷婷| 91网站免费观看 | 狠狠色狠狠色 | 精品国产电影一区 | 在线看成人片 | 99热精品国产一区二区在线观看 | 激情综合亚洲精品 | 免费视频成人 | 国产成人精品一区二区三区在线 | 成片免费观看视频大全 | 天天射天天操天天 | 欧美日韩国产一二三区 | 国产精品久久久久久久久久ktv | 精品人妖videos欧美人妖 | 亚洲另类xxxx | 中文字幕亚洲精品日韩 | 97超碰人人澡 | 免费观看日韩av | 中文字幕高清av | 操操操人人 | 日韩欧美99 | 三级视频国产 | 国产精品mv | 亚洲国产三级在线观看 | 成人综合婷婷国产精品久久免费 | 亚洲精品综合欧美二区变态 | 久久久不卡影院 | 九九热免费观看 | 国产精品av一区二区 | 黄色大片视频网站 | 亚洲成av人片一区二区梦乃 | 天天色欧美 | 黄色aaa级片 | 国产精品久久久久久久久岛 | 日韩高清二区 | 国产美女永久免费 | 中文字幕 影院 | 中文字幕国产精品一区二区 | 特级xxxxx欧美 | 狠狠狠的干| 久久精品屋 | 国产96在线视频 | 久久久久久久久爱 | 最近免费中文字幕mv在线视频3 | 99视屏| 国产视频亚洲精品 | 日韩av一区二区三区四区 | 日本中文在线 | 麻豆免费在线播放 | 天天操天天射天天 | 欧美精品亚洲精品日韩精品 | 日韩欧美高清一区二区 | 欧美另类视频 | 国内亚洲精品 | 亚洲欧美激情精品一区二区 | 欧洲亚洲国产视频 | 18做爰免费视频网站 | 中文字幕电影在线 | 国产精品一区久久久久 | av一区二区三区在线 | 国产亚州精品视频 | 国产精品视频免费看 | 97视频人人免费看 | 久草精品网 | 国产精品一区二区免费视频 | 日韩三级视频在线看 | 久草精品视频在线观看 | 一区二区中文字幕在线播放 | 日本中文字幕网址 | 亚洲免费av观看 | 国语精品视频 | 人人干人人搞 | 六月婷色| 极品中文字幕 | 欧美一级性视频 | 国产精品2020| 日韩av线观看 | 精品av在线播放 | 天堂va在线高清一区 | 成人黄色片在线播放 | 国产中文字幕在线视频 | 中文字幕一区二区三区四区视频 | 婷婷视频在线 | 在线观看免费日韩 | 中文字幕人成乱码在线观看 | 国产午夜精品一区二区三区在线观看 | 伊人五月天综合 | 国产一区二区在线精品 | 欧美 高跟鞋交 xxxxhd | 免费网站色 | 中文字幕丝袜制服 | 免费高清在线观看电视网站 | 久久国产精品99久久久久久进口 | 91男人影院 | 97在线免费观看 | 99爱精品视频 | 国产精品刺激对白麻豆99 | 2021国产视频 | 色在线国产 | 又黄又爽又湿又无遮挡的在线视频 | 婷婷国产一区二区三区 | 99在线观看视频 | 亚洲一区精品二人人爽久久 | 国产欧美日韩精品一区二区免费 | 九九久久精品 | 天天操天天色综合 | 91人人澡人人爽人人精品 | 色多多在线观看 | 天天干,夜夜操 | av午夜电影| 国产精品久久二区 | 久久久精品高清 | 亚洲精品乱码久久久久久写真 | 欧美夫妻生活视频 | 欧美日韩中文在线视频 | 91亚洲精品久久久蜜桃借种 | 欧美一级高清片 | 国产精品自产拍在线观看蜜 | 国产小视频你懂的 | 91精选| 欧美日韩在线第一页 | 欧美最猛性xxxxx免费 | 麻豆一区二区三区视频 | 国产专区免费 | 99热在| 啪嗒啪嗒免费观看完整版 | 天天干天天操天天做 | 欧美激情va永久在线播放 | 日韩精品免费专区 | 国产精品美女久久久久aⅴ 干干夜夜 | 午夜电影 电影 | 四虎在线观看视频 | 四虎影视久久久 | 欧美天天干 | 久久人人爽爽 | 亚洲伦理电影在线 | 麻豆va一区二区三区久久浪 | 五月天天天操 | 97天堂| 中文不卡视频在线 | 久久99精品国产麻豆婷婷 | 久久av免费| 在线观看日韩一区 | 国产一级二级在线观看 | 国产在线视频一区二区三区 | 欧美成人69av | 日本久久中文字幕 | 91大神精品视频 | 欧美日韩另类在线观看 | 99精品久久只有精品 | 久久首页| 欧美日韩精品久久久 | 日本精品久久久久影院 | 色综合咪咪久久网 | 国产欧美综合视频 | av中文字幕在线播放 | 四虎影视www| 日韩一区二区三区在线看 | 亚洲成人av在线 | 色综合天天天天做夜夜夜夜做 | 9797在线看片亚洲精品 | 免费黄色在线网址 | 亚洲国产欧洲综合997久久, | 成人午夜影视 | 成人在线黄色电影 | 狠狠色噜噜狠狠狠狠2022 | 国产成人精品一区在线 | 亚洲人成网站精品片在线观看 | 日韩在线免费视频 | 国产欧美精品xxxx另类 | 国内精品在线观看视频 | 日韩超碰在线 | 日韩二区精品 | 午夜精品一区二区三区在线 | 在线电影a | 日本在线观看黄色 | 日本中文字幕高清 | 亚洲最大免费成人网 | 婷婷五月在线视频 | 在线99 | 亚洲人人av | av丝袜在线 | 国产一区欧美在线 | 伊色综合久久之综合久久 | 99视频精品 | 日日射av | 婷婷丁香久久五月婷婷 | 看片网站黄 | 精品v亚洲v欧美v高清v | 中文字幕在线看片 | 国产精品初高中精品久久 | 久久免费的精品国产v∧ | 国产成人一区二区三区在线观看 | www.啪啪.com| 国产a级精品 | 91在线观看高清 | 日本精品中文字幕 | 中文字幕成人在线观看 | 五月综合色婷婷 | 一级黄色大片在线观看 | 亚洲精品视频网站在线观看 | 有码中文在线 | 亚洲婷婷在线 | 99久久日韩精品视频免费在线观看 | 欧美性色黄大片在线观看 | 欧美久久成人 | 日日摸日日添日日躁av | 成年人免费在线观看网站 | 亚洲三级黄色 | 精品国产诱惑 | 日本黄色免费观看 | 91av视频网站 | 国产人成看黄久久久久久久久 | 日韩av一区二区三区在线观看 | 婷婷精品视频 | 亚洲最新视频在线 | 久香蕉| 亚洲一区二区高潮无套美女 | 日韩极品在线 | 精品国产诱惑 | 成人在线观看影院 | 精品免费久久久久久 | 激情片av| 99久久精品免费看国产四区 | 美女搞黄国产视频网站 | 一级精品视频在线观看宜春院 | www黄色软件 | 亚洲电影图片小说 | 在线观看aa| 天天天射 | 国产成人精品一区二区三区 | 国产网站在线免费观看 | 免费三级在线 | 精品国产资源 | 超级碰碰碰碰 | 久久精品欧美一区二区三区麻豆 | 97色在线观看免费视频 | 四虎在线免费观看 | 久久爱992xxoo| 黄色国产高清 | 日韩精品久久久 | 在线有码中文 | 欧美成人影音 | 日韩系列在线 | 911香蕉| 国产中出在线观看 | 国产男女爽爽爽免费视频 | 在线免费中文字幕 | 欧美日韩不卡在线视频 | 在线观看中文字幕网站 | 在线免费观看视频你懂的 | 成人app在线免费观看 | 国产精品美女久久久久久久 | av电影免费在线 | 亚洲91中文字幕无线码三区 | 在线视频一区观看 | 久久久久久久久免费 | 97av色| 丁香婷婷综合网 | a一片一级| 麻豆国产露脸在线观看 | 人人干人人做 | 国产第一页在线观看 | 九九久久久久久久久激情 | 久久另类视频 | 亚洲综合色激情五月 | 亚洲人成在线观看 | 久久夜色精品国产欧美乱极品 | 96亚洲精品久久久蜜桃 | 成人在线观看资源 | av电影免费观看 | 免费在线成人av电影 | 亚洲丁香久久久 | 高清在线观看av | 丁香五月亚洲综合在线 | 日韩一区二区三区免费电影 | 免费a网| 色免费在线 | 中文字幕在线观看网 | 久久精品久久99 | 婷婷中文在线 | 香蕉视频91 | 在线观看亚洲精品视频 | 九九热久久免费视频 | 99视频国产在线 | 日本成人免费在线观看 | 国产视频91在线 | 欧美日韩高清一区二区 国产亚洲免费看 | 五月婷婷.com | 不卡的av在线播放 | 国产色婷婷精品综合在线手机播放 | 色多视频在线观看 | 久久免费看a级毛毛片 | 国产成免费视频 | 国产色网站 | 日操干| 国内精品免费 | 中文字幕 国产视频 | 天天射天天舔天天干 | 久久99精品视频 | 欧美大荫蒂xxx | 丁香午夜 | 国产精品一区久久久久 | 开心激情五月网 | 亚洲毛片在线观看. | 久久这里只有精品视频99 | 久久人人97超碰精品888 | 午夜精品久久久久99热app | va视频在线观看 | 婷婷久久网 | 中文字幕在线视频免费播放 | 亚洲最快最全在线视频 | 97成人在线观看视频 | 精品99视频| 色综合中文字幕 | 中文字幕在线观看网 | 精品一区二区三区香蕉蜜桃 | 久久人人爽人人爽人人 | 亚洲视频www | 久久综合日 | 日韩在线视频免费观看 | 午夜a区| 国产91小视频| 久久久免费国产 | 日韩欧美一级二级 | 欧美精品做受xxx性少妇 | 亚洲精品99 | 美女久久视频 | 97人人模人人爽人人喊网 | 五月精品 | 99超碰在线播放 | 91av在线免费观看 | 69视频在线播放 | 91在线视频导航 | 国产精品99久久久 | 天天操夜操视频 | 日日碰狠狠添天天爽超碰97久久 | 国产精品久久中文字幕 | 亚洲片在线 | 亚洲国产成人高清精品 | 91资源在线免费观看 | 国产人成一区二区三区影院 | 婷婷资源站 | 天天操天天射天天爽 | 国产中文字幕在线免费观看 | 99视频偷窥在线精品国自产拍 | 欧美日韩大片在线观看 | 日本aaa在线观看 | www.香蕉视频 | 亚洲精品日韩在线观看 | 久草精品视频在线观看 | 久久久久久久久久久影视 | 亚洲免费国产 | 天天操人 | 狂野欧美激情性xxxx | 色狠狠干| 日韩欧美高清一区二区 | 国内精品在线观看视频 | 欧美色图视频一区 | 色狠狠综合天天综合综合 | 国产免费亚洲 | 久久国产精品系列 | 成人福利在线观看 | 国产精品第7页 | 免费日韩 精品中文字幕视频在线 | 日韩欧美视频在线免费观看 | 日韩有码在线播放 | 97超碰在线人人 | 欧美在线1区 | 日女人免费视频 | 蜜桃视频精品 | www久| 在线播放日韩 | 国产黄色免费在线观看 | 一区二区三区在线观看免费视频 | 国产精品你懂的在线观看 | 美女在线黄 | 在线观看日韩免费视频 | 免费观看午夜视频 | 日p在线观看 | 在线观看av片 | 国产丝袜一区二区三区 | 女人18毛片90分钟 | www天天干 | 久久久久亚洲精品 | 国产日韩欧美在线影视 | av成人免费在线 | 久久久国产精品成人免费 | 天天射天天艹 | 国产小视频在线免费观看 | 99精品一区二区 | 免费看日韩 | 国产精品久久久久久高潮 | 欧美一级免费片 | 久久精品国产久精国产 | 成人免费视频a | 欧美日本在线视频 | 在线精品亚洲一区二区 | 三上悠亚一区二区在线观看 | 青春草视频 | 97国产精品亚洲精品 | 午夜久草| 精品乱码一区二区三四区 | 国产91九色视频 | 在线精品亚洲一区二区 | 亚洲精品乱码久久久久久 | 欧美日韩免费在线视频 | 美女黄久久 | 中文字幕日韩精品有码视频 | 亚洲欧美日韩一二三区 | 天天干 天天摸 天天操 | 丝袜美腿亚洲 | 国产精品女教师 | 成人免费毛片aaaaaa片 | 中文乱幕日产无线码1区 | 黄毛片在线观看 | 精品国产乱码久久久久久浪潮 | 日本黄色a级大片 | 黄色天堂在线观看 | 国产又粗又猛又色又黄视频 | 免费的黄色的网站 | 亚洲欧美婷婷六月色综合 | 成人黄在线 | 四虎在线永久免费观看 | 波多野结衣视频一区二区 | 欧美少妇影院 | 黄色的视频 | 欧美日韩视频在线观看一区二区 | 午夜视频日本 | 在线综合 亚洲 欧美在线视频 | 国产精品成人自产拍在线观看 | 国产精品毛片久久 | www.亚洲黄 | 久久久久五月天 | 午夜久久久久久久久久久 | 国产成人久久久久 | 国产视频在 | 99久久日韩精品视频免费在线观看 | 国产小视频在线免费观看 | av观看免费在线 | 日韩综合精品 | 国产精品毛片一区视频 | 国产精品美女久久久久久网站 | 免费进去里的视频 | 五月婷婷影视 | 亚洲资源一区 | 色五月激情五月 | 6699私人影院 | 韩国av在线播放 | 国产免费观看久久 | 久久免费公开视频 | 婷婷精品国产欧美精品亚洲人人爽 | 国产老太婆免费交性大片 | 涩涩在线 | 欧美日韩高清一区 | 国产亚洲精品久久久网站好莱 | 2018亚洲男人天堂 | 国产高清黄色 | 黄色成人av | 伊人天天狠天天添日日拍 | www.com.日本一级 | 人人爱人人爽 | 在线日韩亚洲 | 国产精品第二十页 | 久久精品屋 | 欧美日韩在线观看一区二区 | 久久久久久久久久免费视频 | 伊人婷婷| 国产婷婷| 99精品福利| 天堂在线视频中文网 | 欧美日韩中文国产一区发布 | 美国人与动物xxxx | 成人污视频在线观看 | 国产精品中文久久久久久久 | 国产亚洲精品久久久久久无几年桃 | 中文字幕精品三级久久久 | 久久av中文字幕片 | 亚洲精品乱码久久久久v最新版 | 在线成人免费av | 久久黄色片 | 亚洲最新av在线网址 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久国产精品99久久久久久老狼 | 国产亚洲视频在线 | 丁香视频五月 | 黄色av三级在线 | 国产午夜av| 国产精品九九九 | 亚洲经典视频 | 亚洲欧美婷婷六月色综合 | 久久九九久久九九 | 精品成人免费 | 久久精久久精 | 91精品免费 | 日韩精品在线播放 | 九九综合久久 | 成人午夜精品久久久久久久3d | 久热超碰 | 中文字幕在线免费 | 久久er99热精品一区二区 | 国产一级一级国产 | 久草在线99| 国产成人av一区二区三区在线观看 | 91资源在线观看 | 日本字幕网 | 国产18精品乱码免费看 | 久久精品亚洲精品国产欧美 | 中文字幕传媒 | 国产精品免费视频一区二区 | 久草久草视频 | 国产精品久久久久影院日本 | 91在线国产观看 | 色综合中文综合网 | 91久久久久久国产精品 | 丁香激情婷婷 | 久久精品亚洲 | 99久久精品国产网站 | 99久久精品国产网站 | 一区二区三区中文字幕在线观看 | 色网站中文字幕 | 狠狠操操操| 中文字幕一区在线 | 色网站在线 | 日韩视频在线不卡 | 日韩特级黄色片 | 婷婷婷国产在线视频 | 国产精品国产精品 | 亚洲一区二区三区毛片 | 久久久精品二区 | 五月情婷婷| 国产精品高潮呻吟久久av无 | 欧美成人久久 | 精品国产区 | 精品自拍sae8—视频 | 久久激情视频免费观看 | 欧美日韩91 | 黄色91免费观看 | 久久久国产一区二区 | 国产精品久久一区二区三区, | 狠狠躁夜夜av| 99视频这里有精品 | 97网在线观看 | 99爱这里只有精品 | 黄色91免费观看 | 婷婷在线五月 | 九九久久久久久久久激情 | 五月婷婷影院 | 日韩专区中文字幕 | 久久超碰网 | 国产视频久久久 | 日韩欧美在线高清 | 久久视精品 | 亚洲男模gay裸体gay | 亚洲综合色播 | 久久精品视频在线观看免费 | 久久久久成人精品免费播放动漫 | 麻豆视频免费在线 | 一区三区在线欧 | 日韩欧美在线观看一区二区三区 | 日韩久久午夜一级啪啪 | 欧美孕妇视频 | 久精品视频在线 | 激情综合五月婷婷 | 国产精品久久人 | 欧美精品免费视频 | 中文字幕一区二区三区四区视频 | 国产精品99久久99久久久二8 | 一色av| 国产成人无码AⅤ片在线观 日韩av不卡在线 | 免费日韩一区 | 国产性天天综合网 | 国产午夜在线观看视频 | 六月色丁香 | 色资源在线 | 97av视频在线 | 国产盗摄精品一区二区 | 久久精品4 | 久久情侣偷拍 | 国产精品久久久免费 | 一级一级一片免费 | 91精品在线视频观看 | 操碰av| 国产区在线看 | 久久伊人热 | 欧美日韩精品免费观看视频 | 精品国产亚洲在线 | 亚洲精品网页 | 国产在线欧美日韩 | 婷婷六月天综合 | 又粗又长又大又爽又黄少妇毛片 | 亚洲成人黄色 | 在线观看成人网 | 国产精品精品国产婷婷这里av | 久久精品欧美一区二区三区麻豆 | 奇米网444 | 天天射日 | 成人免费观看a | 波多野结衣在线观看一区 | 999成人 | 国产成人久久久77777 | a在线观看国产 | 久久久久99精品国产片 | 日本中文字幕久久 |