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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数独游戏项目报告

發(fā)布時(shí)間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数独游戏项目报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)獨(dú)游戲

一、項(xiàng)目開發(fā)的PSP表格總結(jié)

PSP2.1Personal Software Process Stages預(yù)估耗時(shí)(分鐘)實(shí)際耗時(shí)(分鐘)
Planning計(jì)劃8060
· Estimate· 估計(jì)這個(gè)任務(wù)需要多少時(shí)間600600
Development開發(fā)120120
· Analysis· 需求分析 (包括學(xué)習(xí)新技術(shù))180180
· Design Spec· 生成設(shè)計(jì)文檔150150
· Design Review· 設(shè)計(jì)復(fù)審 (和同事審核設(shè)計(jì)文檔)6060
· Coding Standard· 代碼規(guī)范 (為目前的開發(fā)制定合適的規(guī)范)6060
· Design· 具體設(shè)計(jì)180180
· Coding· 具體編碼120120
· Code Review· 代碼復(fù)審3030
· Test· 測(cè)試(自我測(cè)試,修改代碼,提交修改)300300
Reporting報(bào)告200220
· Test Report· 測(cè)試報(bào)告180200
· Size Measurement· 計(jì)算工作量2030
· Postmortem & Process Improvement Plan· 事后總結(jié), 并提出過程改進(jìn)計(jì)劃6060
合計(jì)23402370

二、項(xiàng)目介紹及要求

項(xiàng)目:生成數(shù)獨(dú)終局并且能求解數(shù)獨(dú)問題的控制臺(tái)程序

項(xiàng)目需求:

  • 在命令行中使用-c參數(shù)加數(shù)字N(1<=N<=1000000)控制生成數(shù)獨(dú)終局的數(shù)量,例如下述命令將生成20個(gè)數(shù)獨(dú)終局至文件中:

    sudoku -c 20
  • 將生成的數(shù)獨(dú)終局用一個(gè)文本文件(假設(shè)名字叫 sudoku.txt)的形式保存起來,每次生成的txt文件需要覆蓋上次生成的txt文件,文件內(nèi)的格式如下,數(shù)與數(shù)之間由空格分開,終局與終局之間空一行,行末無空格:

    2 6 8 4 7 3 9 5 1 3 4 1 9 6 5 2 7 8 7 9 5 8 1 2 3 6 4 5 7 4 6 2 1 8 3 9 1 3 9 5 4 8 6 2 7 8 2 6 3 9 7 4 1 5 9 1 7 2 8 6 5 4 3 6 8 3 1 5 4 7 9 2 4 5 2 7 3 9 1 8 64 5 1 7 8 2 3 6 9 7 8 6 4 9 3 5 2 1 3 9 2 1 5 6 4 8 7 5 2 7 6 4 9 8 1 3 9 6 8 5 3 1 2 7 4 1 3 4 2 7 8 6 9 5 8 1 5 3 6 7 9 4 2 6 7 3 9 2 4 1 5 8 2 4 9 8 1 5 7 3 69 5 8 3 6 7 1 2 4 2 3 7 4 5 1 9 6 8 1 4 6 9 2 8 3 5 7 6 1 2 8 7 4 5 9 3 5 7 3 6 1 9 4 8 2 4 8 9 2 3 5 6 7 1 7 2 4 5 9 3 8 1 6 8 9 1 7 4 6 2 3 5 3 6 5 1 8 2 7 4 9 ……
  • 程序在處理命令行參數(shù)時(shí),不僅能處理格式正確的參數(shù),還能夠處理各種異常的情況,如:

    sudoku.exe -c abc

  • 在生成數(shù)獨(dú)矩陣時(shí),左上角的第一個(gè)數(shù)為:(學(xué)號(hào)后兩位相加)% 9 + 1。例如學(xué)生A學(xué)號(hào)后2位是80,則該數(shù)字為(8+0)% 9 + 1 = 9,那么生成的數(shù)獨(dú)棋盤應(yīng)如下(x表示滿足數(shù)獨(dú)規(guī)則的任意數(shù)字):

    9 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x
  • 二、需求分析

    1.功能建模

    0層圖:

    1層圖:

    2.功能建模

    #mermaid-svg-Q4KPT1pnrgOPX4P7 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .label text{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .node rect,#mermaid-svg-Q4KPT1pnrgOPX4P7 .node circle,#mermaid-svg-Q4KPT1pnrgOPX4P7 .node ellipse,#mermaid-svg-Q4KPT1pnrgOPX4P7 .node polygon,#mermaid-svg-Q4KPT1pnrgOPX4P7 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .node .label{text-align:center;fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .node.clickable{cursor:pointer}#mermaid-svg-Q4KPT1pnrgOPX4P7 .arrowheadPath{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edgeLabel rect{opacity:0.9}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edgeLabel span{color:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .cluster text{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Q4KPT1pnrgOPX4P7 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Q4KPT1pnrgOPX4P7 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .actor-line{stroke:grey}#mermaid-svg-Q4KPT1pnrgOPX4P7 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sequenceNumber{fill:#fff}#mermaid-svg-Q4KPT1pnrgOPX4P7 #sequencenumber{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .messageText{fill:#333;stroke:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Q4KPT1pnrgOPX4P7 .labelText,#mermaid-svg-Q4KPT1pnrgOPX4P7 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .loopText,#mermaid-svg-Q4KPT1pnrgOPX4P7 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Q4KPT1pnrgOPX4P7 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Q4KPT1pnrgOPX4P7 .noteText,#mermaid-svg-Q4KPT1pnrgOPX4P7 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Q4KPT1pnrgOPX4P7 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .section{stroke:none;opacity:0.2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .section2{fill:#fff400}#mermaid-svg-Q4KPT1pnrgOPX4P7 .section1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .section3{fill:#fff;opacity:0.2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sectionTitle0{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sectionTitle1{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sectionTitle2{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sectionTitle3{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Q4KPT1pnrgOPX4P7 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .grid path{stroke-width:0}#mermaid-svg-Q4KPT1pnrgOPX4P7 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .task{stroke-width:2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText:not([font-size]){font-size:11px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .task.clickable{cursor:pointer}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskText3{fill:#fff}#mermaid-svg-Q4KPT1pnrgOPX4P7 .task0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .task1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .task2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutside0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutside2{fill:#000}#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutside1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .taskTextOutside3{fill:#000}#mermaid-svg-Q4KPT1pnrgOPX4P7 .active0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .active1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .active2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeText0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeText1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeText2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeText3{fill:#000 !important}#mermaid-svg-Q4KPT1pnrgOPX4P7 .done0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .done1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .done2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneText0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneText1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneText2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneText3{fill:#000 !important}#mermaid-svg-Q4KPT1pnrgOPX4P7 .crit0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .crit1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .crit2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCrit0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCrit1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCrit2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCrit0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCrit1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCrit2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Q4KPT1pnrgOPX4P7 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .milestoneText{font-style:italic}#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCritText0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCritText1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCritText2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .doneCritText3{fill:#000 !important}#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCritText0,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCritText1,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCritText2,#mermaid-svg-Q4KPT1pnrgOPX4P7 .activeCritText3{fill:#000 !important}#mermaid-svg-Q4KPT1pnrgOPX4P7 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.classGroup text .title{font-weight:bolder}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.clickable{cursor:pointer}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Q4KPT1pnrgOPX4P7 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .dashed-line{stroke-dasharray:3}#mermaid-svg-Q4KPT1pnrgOPX4P7 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 .commit-id,#mermaid-svg-Q4KPT1pnrgOPX4P7 .commit-msg,#mermaid-svg-Q4KPT1pnrgOPX4P7 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Q4KPT1pnrgOPX4P7 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Q4KPT1pnrgOPX4P7 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Q4KPT1pnrgOPX4P7 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Q4KPT1pnrgOPX4P7 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edgeLabel text{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Q4KPT1pnrgOPX4P7 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Q4KPT1pnrgOPX4P7 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Q4KPT1pnrgOPX4P7 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Q4KPT1pnrgOPX4P7 .note-edge{stroke-dasharray:5}#mermaid-svg-Q4KPT1pnrgOPX4P7 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Q4KPT1pnrgOPX4P7 .error-icon{fill:#522}#mermaid-svg-Q4KPT1pnrgOPX4P7 .error-text{fill:#522;stroke:#522}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Q4KPT1pnrgOPX4P7 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Q4KPT1pnrgOPX4P7 .marker{fill:#333}#mermaid-svg-Q4KPT1pnrgOPX4P7 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-Q4KPT1pnrgOPX4P7 {color: rgba(0, 0, 0, 0.75);font: ;}用戶命令分析系統(tǒng)終局生成命令錯(cuò)誤命令需要生成的終局個(gè)數(shù)生成終局終局文件用戶命令分析系統(tǒng)終局生成

    三、解題思路

    在拿到題目的時(shí)候,首先我們不難看出項(xiàng)目的關(guān)鍵在于生成1000000中不同的數(shù)獨(dú)。在此之前我們應(yīng)該先來了解一下數(shù)獨(dú)的含義。
    百度百科如下所示:

    在了解完數(shù)獨(dú)之后,我們就要來想一想怎么去實(shí)現(xiàn)這個(gè)過程。
    在上網(wǎng)查詢完資料之后,我選擇了一種較為簡(jiǎn)單且較為好理解的一種算法。
    根據(jù)項(xiàng)目要求,我們數(shù)獨(dú)的第一行第一個(gè)數(shù)字是確定的。以我為例,我的學(xué)號(hào)后兩位37計(jì)算所得到的首數(shù)字就為2。
    首先,我們先考慮行內(nèi)變換,因?yàn)閿?shù)獨(dú)的其中一行變換,其他的也要變換,所以我們只考慮第一行的情況就可以。因?yàn)榈谝恍械氖讛?shù)字確認(rèn),所以我們對(duì)其他8個(gè)數(shù)字進(jìn)行全排列,得到8!種方案,也就是40320種方案,
    核心代碼為:

    void Permutation(int now) {if (now == 8) {for (int i = 0;i < 9;i++) {firstline[num][i] = first[i];}num++;}else {for (int i = now;i < 9;i++) {swap(first[i], first[now]);//把要打頭的數(shù)放到最開頭的位置Permutation(now + 1);swap(first[i], first[now]);//為避免重復(fù)排序,每個(gè)數(shù)打頭結(jié)束后都恢復(fù)初始排序,防止重復(fù)的方法很多,不止這一種}} }

    但是這還不夠項(xiàng)目所要求的1000000種方案。那么接下來我們就可以進(jìn)行行間變換,首先我們知道數(shù)獨(dú)中九宮格內(nèi)的數(shù)字各不相同,一個(gè)九宮格包含三行。
    那么我們就可以在2-3,4-6,7-9行間進(jìn)行交換。同理,我們也對(duì)他們進(jìn)行全排列,這樣我們就可以得到2!*3!*3!*8!=2903040種方案,遠(yuǎn)遠(yuǎn)滿足項(xiàng)目所要求的1000000種方案,由于該全排列數(shù)目較少,所以我們可以直接列出交換順序,如下所示:

    int paixu1_3[2][3] = { {0,1,2},{0,2,1} }; int paixu4_6[6][3] = { {3,4,5},{3,5,4},{4,3,5},{4,5,3},{5,3,4},{5,4,3} }; int paixu7_9[6][3] = { {6,7,8},{6,8,7},{7,6,8},{7,8,6},{8,6,7},{8,7,6} };

    這樣我們就完成了數(shù)獨(dú)生成方面的算法思路構(gòu)造。

    四、設(shè)計(jì)實(shí)現(xiàn)過程

    在進(jìn)行程序設(shè)計(jì)時(shí),我采用的是結(jié)構(gòu)化開發(fā)方法,開發(fā)語(yǔ)言為C++。因?yàn)関s上自帶的性能分析和單元測(cè)試工具,所以我的開發(fā)平臺(tái)為vs2019.
    首先我設(shè)計(jì)了程序流程圖如下所示:

    #mermaid-svg-Ve9SOw6Uwb19WQP5 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .label text{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .node rect,#mermaid-svg-Ve9SOw6Uwb19WQP5 .node circle,#mermaid-svg-Ve9SOw6Uwb19WQP5 .node ellipse,#mermaid-svg-Ve9SOw6Uwb19WQP5 .node polygon,#mermaid-svg-Ve9SOw6Uwb19WQP5 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .node .label{text-align:center;fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .node.clickable{cursor:pointer}#mermaid-svg-Ve9SOw6Uwb19WQP5 .arrowheadPath{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edgeLabel rect{opacity:0.9}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edgeLabel span{color:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .cluster text{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-Ve9SOw6Uwb19WQP5 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Ve9SOw6Uwb19WQP5 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .actor-line{stroke:grey}#mermaid-svg-Ve9SOw6Uwb19WQP5 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sequenceNumber{fill:#fff}#mermaid-svg-Ve9SOw6Uwb19WQP5 #sequencenumber{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .messageText{fill:#333;stroke:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-Ve9SOw6Uwb19WQP5 .labelText,#mermaid-svg-Ve9SOw6Uwb19WQP5 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .loopText,#mermaid-svg-Ve9SOw6Uwb19WQP5 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-Ve9SOw6Uwb19WQP5 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Ve9SOw6Uwb19WQP5 .noteText,#mermaid-svg-Ve9SOw6Uwb19WQP5 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-Ve9SOw6Uwb19WQP5 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .section{stroke:none;opacity:0.2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .section2{fill:#fff400}#mermaid-svg-Ve9SOw6Uwb19WQP5 .section1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .section3{fill:#fff;opacity:0.2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sectionTitle0{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sectionTitle1{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sectionTitle2{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sectionTitle3{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-Ve9SOw6Uwb19WQP5 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .grid path{stroke-width:0}#mermaid-svg-Ve9SOw6Uwb19WQP5 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .task{stroke-width:2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText:not([font-size]){font-size:11px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .task.clickable{cursor:pointer}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskText3{fill:#fff}#mermaid-svg-Ve9SOw6Uwb19WQP5 .task0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .task1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .task2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutside0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutside2{fill:#000}#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutside1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .taskTextOutside3{fill:#000}#mermaid-svg-Ve9SOw6Uwb19WQP5 .active0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .active1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .active2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeText0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeText1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeText2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeText3{fill:#000 !important}#mermaid-svg-Ve9SOw6Uwb19WQP5 .done0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .done1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .done2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneText0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneText1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneText2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneText3{fill:#000 !important}#mermaid-svg-Ve9SOw6Uwb19WQP5 .crit0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .crit1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .crit2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCrit0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCrit1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCrit2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCrit0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCrit1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCrit2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-Ve9SOw6Uwb19WQP5 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .milestoneText{font-style:italic}#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCritText0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCritText1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCritText2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .doneCritText3{fill:#000 !important}#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCritText0,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCritText1,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCritText2,#mermaid-svg-Ve9SOw6Uwb19WQP5 .activeCritText3{fill:#000 !important}#mermaid-svg-Ve9SOw6Uwb19WQP5 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.classGroup text .title{font-weight:bolder}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.clickable{cursor:pointer}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-Ve9SOw6Uwb19WQP5 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .dashed-line{stroke-dasharray:3}#mermaid-svg-Ve9SOw6Uwb19WQP5 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 .commit-id,#mermaid-svg-Ve9SOw6Uwb19WQP5 .commit-msg,#mermaid-svg-Ve9SOw6Uwb19WQP5 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-Ve9SOw6Uwb19WQP5 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-Ve9SOw6Uwb19WQP5 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-Ve9SOw6Uwb19WQP5 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-Ve9SOw6Uwb19WQP5 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edgeLabel text{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-Ve9SOw6Uwb19WQP5 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-Ve9SOw6Uwb19WQP5 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-Ve9SOw6Uwb19WQP5 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-Ve9SOw6Uwb19WQP5 .note-edge{stroke-dasharray:5}#mermaid-svg-Ve9SOw6Uwb19WQP5 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-Ve9SOw6Uwb19WQP5 .error-icon{fill:#522}#mermaid-svg-Ve9SOw6Uwb19WQP5 .error-text{fill:#522;stroke:#522}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-Ve9SOw6Uwb19WQP5 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-Ve9SOw6Uwb19WQP5 .marker{fill:#333}#mermaid-svg-Ve9SOw6Uwb19WQP5 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-Ve9SOw6Uwb19WQP5 {color: rgba(0, 0, 0, 0.75);font: ;}ynyn開始輸入?yún)?shù)-c與參數(shù)輸入創(chuàng)建數(shù)獨(dú)命令正確?i = 0i < N?創(chuàng)建sudoku運(yùn)行程序i += 1結(jié)束

    在整理完程序的流程圖之后,我們就開始結(jié)構(gòu)化編程了。首先來說明一下我所定義的函數(shù)與數(shù)據(jù)結(jié)構(gòu),如下所示:
    Shudo:(存放完整數(shù)獨(dú))

    typedef struct {int form[size][size]; }Shudo;

    打印函數(shù)PrintSudoku:將信息打印到sudoku.txt文件中

    void PrintSudoku(FILE* fp, Shudo shudo, int num)

    全排列函數(shù)Permutation:對(duì)第一行進(jìn)行全排列,獲取第一行行間交換的所有情況

    void Permutation(int now)

    創(chuàng)造數(shù)獨(dú)函數(shù)CreatSudoku:根據(jù)所需數(shù)獨(dú)個(gè)數(shù)生成數(shù)獨(dú)

    int CreatSudoku(int count)

    下面就來展示程序的具體實(shí)現(xiàn)過程:

    首先,我們現(xiàn)根據(jù)設(shè)計(jì)思路自我定義一個(gè)初始的一行數(shù)據(jù)以及第一行變換所得其他行的數(shù)據(jù)變更順序,代碼如下:

    int firstline[40320][9] = { 0 };//用一個(gè)二維數(shù)組來存放第一行的變換情況,也就是8!種 int first[size] = { 2,3,4,5,6,7,8,9,1 };//存放初始的第一行數(shù)字 int shunxu[9] = { 0,3,6,1,4,7,2,5,8 };//表示行間的交換順序 int num = 0;

    由于行間交換的全排列情況較少,所以我們可以提前進(jìn)行定義,減少程序運(yùn)行時(shí)間,代碼如下:

    //行間交換順序全排列結(jié)果 int paixu1_3[2][3] = { {0,1,2},{0,2,1} }; int paixu4_6[6][3] = { {3,4,5},{3,5,4},{4,3,5},{4,5,3},{5,3,4},{5,4,3} }; int paixu7_9[6][3] = { {6,7,8},{6,8,7},{7,6,8},{7,8,6},{8,6,7},{8,7,6} };

    之后我們?cè)趯?duì)打印輸出函數(shù)PrintSudoku和全排列函數(shù)Permutation進(jìn)行設(shè)計(jì)實(shí)現(xiàn),其中全排列算法我參考了全排列算法的理解與實(shí)現(xiàn)(遞歸+字典序)這篇文章,文章講得很好,讓我完全理解了全排列算法的思想,兩個(gè)函數(shù)的代碼構(gòu)造如下:

    void PrintSudoku(FILE* fp, Shudo shudo, int num) {if (num != 0)fputc('\n', fp);for (int i = 0;i < 9;i++) {for (int j = 0;j < 9;j++) {fprintf(fp, "%d%c", shudo.form[i][j], j == 8 ? '\n' : ' ');}} } //對(duì)第一行進(jìn)行全排列 void Permutation(int now) {if (now == 8) {for (int i = 0;i < 9;i++) {firstline[num][i] = first[i];}num++;}else {for (int i = now;i < 9;i++) {swap(first[i], first[now]);//把要打頭的數(shù)放到最開頭的位置Permutation(now + 1);swap(first[i], first[now]);//為避免重復(fù)排序,每個(gè)數(shù)打頭結(jié)束后都恢復(fù)初始排序,防止重復(fù)的方法很多,不止這一種}} }

    之后就是我們的核心函數(shù) CreatSudoku的設(shè)計(jì)實(shí)現(xiàn)了。因?yàn)槲覀円呀?jīng)獲得第一行行間交換的所有情況,所以我們可以直接根據(jù)之前設(shè)定好的**shunxu[9]**中所表示的數(shù)據(jù)來直接得到其余8行的數(shù)據(jù),之后根據(jù)外部傳來的參數(shù)來決定行間交換的次數(shù),這樣就可以實(shí)現(xiàn)生成數(shù)獨(dú)的功能了。代碼如下:

    //構(gòu)造所需的數(shù)獨(dú) int CreatSudoku(int count) {FILE* fp;fp = fopen("sudoku.txt", "w");//只允許寫入int num = 0;Shudo shudu;for (int i = 0;i < 40320;i++) {Shudo backup;//為每一種第一行情況構(gòu)造完整數(shù)獨(dú)for (int j = 0;j < 9;j++) {backup.form[0][j] = firstline[i][j];}for (int j = 1;j < 9;j++) {for (int k = 0;k < 9;k++) {backup.form[j][k] = backup.form[0][(k + shunxu[j]) % 9];}}shudu = backup;//將構(gòu)造好的數(shù)獨(dú)進(jìn)行行間交換for (int j = 0;j < 1;j++) {for (int k = 0;k < 6;k++) {for (int l = 0;l < 6;l++) {if (num < count) {for (int m = 0;m < 3;m++) {for (int n = 0;n < 9;n++) {shudu.form[m][n] = backup.form[paixu1_3[j][m]][n];}}for (int m = 3;m < 6;m++) {for (int n = 0;n < 9;n++) {shudu.form[m][n] = backup.form[paixu4_6[k][m - 3]][n];}}for (int m = 6;m < 9;m++) {for (int n = 0;n < 9;n++) {shudu.form[m][n] = backup.form[paixu7_9[l][m - 6]][n];}}PrintSudoku(fp, shudu, num);num++;}else if (num == count) {fclose(fp);return 1;}else if (num > count) {fclose(fp);printf("程序運(yùn)行錯(cuò)誤!\n");}}}}}//若程序運(yùn)營(yíng)到這里還沒有終止,表示程序出錯(cuò)fclose(fp);printf("程序運(yùn)行錯(cuò)誤!\n"); }

    最后就是我們主函數(shù)main的構(gòu)造:
    首先我們先對(duì)命令行參數(shù)進(jìn)行一系列的判斷,這里就不具體描述了,詳見代碼。如果符合,我們就先調(diào)用全排列函數(shù),獲取第一行行間交換的所有情況,之后將需要的數(shù)獨(dú)個(gè)數(shù)傳入數(shù)獨(dú)生成函數(shù)中,就完成了項(xiàng)目的要求,代碼如下:

    int main(int argc, char* argv[]) {clock_t start, finish;start = clock();int count = 0;//判斷輸入信息if (argc !=3) {printf("請(qǐng)輸入正確的操作信息!\n");return -1;return 0;}if (strcmp(argv[1], "-c") == 0 ) {int len = strlen(argv[2]);for (int i = 0; i < len; i++){if (argv[2][i] >= '0' && argv[2][i] <= '9'){int value = argv[2][i] - '0';for (int j = 1; j <= len - 1; j++)value *= 10;count += value;}else{printf("請(qǐng)輸入一個(gè)合法的數(shù)字!\n");return -3;return 0;}if (count > 1000000 || count <= 0) {printf("請(qǐng)輸入合法的范圍(1——1000000)!\n");return -4;return 0;}}//先將其初始化if (firstline[0][0] == 0) {num = 0;Permutation(1);}CreatSudoku(count);}else{printf("請(qǐng)輸入正確獲取數(shù)獨(dú)命令!\n");return -2;return 0;}//計(jì)算運(yùn)行時(shí)間finish = clock();cout << "使用時(shí)間: " << double(finish - start) / CLOCKS_PER_SEC << "s" << endl;return 2;

    注意:其中的返回值沒有特殊含義,是為了方便單元測(cè)試路徑測(cè)試所設(shè)立的

    五、程序正確性以及性能測(cè)試

    程序正確性測(cè)試:輸入范圍限制在 1-1000,要求程序在 60 s 內(nèi)給出結(jié)果,超時(shí)則認(rèn)定運(yùn)行結(jié)果無效
    下圖為生成1000個(gè)數(shù)獨(dú)的正確性測(cè)試結(jié)果:

    程序性能測(cè)試:輸入范圍限制在 10000-1000000,沒有時(shí)間的最小要求限制
    下圖為生成1000000個(gè)數(shù)獨(dú)的性能測(cè)試結(jié)果:

    六、單元測(cè)試的設(shè)計(jì)及性能分析

    在單元測(cè)試中,我們應(yīng)用的是vs自帶的工具,首先我們創(chuàng)建一個(gè)test.h的頭文件,將我們要測(cè)試的模塊寫進(jìn)去。之后創(chuàng)建測(cè)試項(xiàng)目UnitTest1
    根據(jù)程序流程圖以及main函數(shù)的編寫,我采用的單元測(cè)試策略為條件組合測(cè)試,一共設(shè)計(jì)了5個(gè)測(cè)試用例,測(cè)試代碼如下所示:

    #include "pch.h" #include "CppUnitTest.h" #include "../sudo/test.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework;namespace UnitTest1 {TEST_CLASS(UnitTest1){public:TEST_METHOD(TestMethod1){int argc = 2;char* argv[2];int a = -1;Assert::AreEqual(a, main(argc, argv));}TEST_METHOD(TestMethod2){int argc = 3;char* argv[3] = { "sudoku", "-s" ,"20"};int a = -2;Assert::AreEqual(a, main(argc, argv));}TEST_METHOD(TestMethod3){int argc = 3;char* argv[3] = { "sudoku","-c","abc" };int a = -3;Assert::AreEqual(a, main(argc, argv));}TEST_METHOD(TestMethod4){int argc = 3;char* argv[3] = { "sudoku","-c","1000010" };int a = -4;Assert::AreEqual(a, main(argc, argv));}TEST_METHOD(TestMethod5){int argc = 3;char* argv[3] = { "sudoku","-c","20" };int a = 2;Assert::AreEqual(a, main(argc, argv));}}; }

    VS的測(cè)試結(jié)果圖片如下所示:

    之后我們利用VS的性能探查器來進(jìn)行性能分析
    結(jié)果如下所示:




    通過上圖我們可以看出,程序的時(shí)間主要消耗在打印輸出方面了,因此我們可以通過改進(jìn)輸出流來進(jìn)行程序的優(yōu)化,可以節(jié)約大量的時(shí)間。

    七、第一階段總結(jié)與反思

    在第一階段的任務(wù)中,我第一次感覺到了軟件工程的必要性,深深地意識(shí)到軟件的開發(fā)不只是編程這么簡(jiǎn)單,編程知識(shí)軟件工程中的一部分。
    在項(xiàng)目的開始,由于對(duì)各種工具缺乏認(rèn)識(shí),導(dǎo)致我開始的進(jìn)程十分緩慢,開發(fā)過程十分沒有動(dòng)力,但逐漸了解這些工具之后,我深深的感受到了這些工具對(duì)我們的幫助。其中單元測(cè)試、性能分析以及需求分析過程中的建模也用到了我們課程所學(xué)的知識(shí),讓我學(xué)以致用,收獲了許多!

    總結(jié)

    以上是生活随笔為你收集整理的数独游戏项目报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    久草久草在线 | 麻豆视频在线免费 | 青青河边草免费观看完整版高清 | 麻豆传媒电影在线观看 | 日韩精品视频久久 | 天天爽人人爽 | 国产一级电影免费观看 | 久久综合狠狠综合久久狠狠色综合 | 丝袜av一区 | 久久激情视频免费观看 | av爱干| 久久婷婷国产 | 亚洲精品视 | 日韩精品中文字幕久久臀 | 2022久久国产露脸精品国产 | 夜夜夜精品| 免费色av| 国产区精品在线观看 | 三级黄色网络 | 成人av网址大全 | 国产盗摄精品一区二区 | 中文字幕乱码一区二区 | 国产又粗又猛又黄视频 | 久久九九久久九九 | 菠萝菠萝在线精品视频 | 国产精品观看在线亚洲人成网 | 国内精品视频久久 | 99色婷婷| 欧美天堂久久 | 99久久www| 91亚瑟视频 | 亚洲激情在线视频 | 国内成人精品视频 | 国产中文字幕在线播放 | 国产一区视频免费在线观看 | 超碰在线观看av.com | 中文字幕在线播放日韩 | 日韩欧美69 | 欧美成人一区二区 | 玖玖玖精品 | 天天操天天射天天添 | 久久久久久久电影 | 美女国内精品自产拍在线播放 | 最近更新好看的中文字幕 | 99视频在线免费看 | 在线视频 影院 | 亚洲精品国产精品国自 | 日本精品一区二区三区在线观看 | 色网站国产精品 | 亚洲码国产日韩欧美高潮在线播放 | 欧美巨大荫蒂茸毛毛人妖 | 日韩激情一二三区 | 国产精品男女 | 亚洲情婷婷 | 亚洲精品色视频 | 色丁香婷婷 | 999久久国精品免费观看网站 | 久久免费视频网站 | 亚洲综合色视频 | 国产色在线视频 | av福利在线看 | 免费电影播放 | 日色在线视频 | 久久久久久久久久久久久久av | 亚洲伊人网在线观看 | 国产一级性生活 | 国产中文在线播放 | 久久国产网站 | 成人a级网站 | 成年人电影毛片 | 最新日韩在线观看视频 | 中文电影网 | 日韩精品久久久久久久电影竹菊 | 在线 影视 一区 | 69视频在线播放 | 国产日韩精品一区二区 | 色综合久久中文综合久久牛 | 黄色影院在线免费观看 | 欧美激情在线网站 | 探花视频免费观看高清视频 | 国产精品久久久777 成人手机在线视频 | 国产精品一二三 | 久久精彩视频 | 99在线看 | 久久免费视频这里只有精品 | 欧美精品久久久久a | 在线免费av网站 | 99久久精品免费视频 | 免费观看视频的网站 | 96精品高清视频在线观看软件特色 | 午夜私人影院 | 免费h视频 | 精品在线观看一区二区三区 | 色婷婷狠狠五月综合天色拍 | 国内偷拍精品视频 | 欧美激情视频一区 | 日本黄色免费在线 | 美女网站视频久久 | 日韩av中文字幕在线免费观看 | 黄色在线成人 | 成人一级片视频 | 日韩一区二区三区观看 | 久久国产精品成人免费浪潮 | 国产色婷婷在线 | 久久久久久久影视 | 亚洲五月激情 | 欧美性大战久久久久 | 免费看一级黄色大全 | 久久大片 | 成人在线一区二区 | 欧洲一区二区三区精品 | wwwwww黄| 国产精品成人久久 | 久 久久影院 | 成人黄色电影免费观看 | 欧美色伊人| 欧美激情综合网 | 日日操天天操夜夜操 | 国产一区精品在线 | 日本精品xxxx| av资源在线看 | 天天爽夜夜爽精品视频婷婷 | 国产精品毛片久久久久久 | 九九久久视频 | 综合久久影院 | 日本精油按摩3 | 欧美一级片免费观看 | 日韩在线观看你懂的 | 久久久久久久久亚洲精品 | 深夜视频久久 | 亚洲mv大片欧洲mv大片免费 | 色黄久久久久久 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 亚洲视频 一区 | 99亚洲精品在线 | 久久综合九色综合欧美就去吻 | 久久久久久国产精品亚洲78 | 亚洲精品视频免费观看 | 国内久久精品视频 | 亚洲精品女人 | 日韩在线免费视频观看 | 婷婷色吧| 97精品国产手机 | 美女视频网站久久 | 夜夜爱av | 在线视频观看你懂的 | 日日爽天天爽 | 日韩有码欧美 | 欧美日韩免费一区 | 天天插狠狠插 | 亚洲精品国内 | 精品欧美一区二区三区久久久 | a资源在线 | 五月婷婷激情综合网 | 又大又硬又黄又爽视频在线观看 | 91久色蝌蚪 | 国产精品成人久久久久 | 香蕉视频在线网站 | 日韩精品免费专区 | 欧美视频一区二 | 中文字幕888 | 99久久国产免费,99久久国产免费大片 | 免费黄色网址网站 | 国产成人精品综合久久久 | 婷婷综合伊人 | 精品影院 | 国产久草在线观看 | 正在播放一区二区 | 亚洲最大av | 久久综合激情 | 911久久香蕉国产线看观看 | 欧美吞精 | 国产一区二区三区在线 | 国产精品美女久久久久久久 | 日韩av一区二区在线 | 中文字幕日本在线 | 欧美一区二区三区四区夜夜大片 | 欧美不卡在线 | 天天色天天操天天爽 | 97在线看片 | 狠狠狠狠干| 国产九九九九九 | 一区二区三区精品久久久 | 69人人| 日韩二区三区在线 | 国产视频在线观看免费 | 亚洲国产精品女人久久久 | 日韩欧美精品在线 | 一区二区三区三区在线 | 久久99精品国产 | 亚洲 欧美 日韩 综合 | 国产专区一 | 亚洲精品美女久久久久网站 | 成人在线视频在线观看 | 麻豆你懂的 | 国产精品99久久久久久武松影视 | 日韩免费一区二区在线观看 | 日韩肉感妇bbwbbwbbw | 激情xxxx| 91成人在线观看高潮 | av在线免费观看不卡 | 日韩欧美在线中文字幕 | 午夜精品福利在线 | 国产精品成人av在线 | 91片黄在线观看动漫 | 在线观看亚洲电影 | 97av精品| 国产aa免费视频 | 日日夜夜狠狠干 | 狠狠色狠狠色综合日日92 | 亚洲五月花 | 国产精品第一视频 | 国产精品美女999 | 日韩影视精品 | 亚洲精品美女久久 | 国产一区二区三区 在线 | 免费av视屏 | 久久99视频精品 | 国产成人久久精品77777 | 国产精品免费久久久久影院仙踪林 | 久久精品在线 | 四虎国产精品免费观看视频优播 | 激情av在线播放 | 麻豆一区二区三区视频 | 男女精品久久 | 日韩欧美精品在线 | 亚洲人成人在线 | 日韩在线免费不卡 | 午夜精品一区二区三区在线观看 | 亚洲网站在线 | 久久国产精彩视频 | 亚洲精品国产品国语在线 | 久久草网站 | 色综合夜色一区 | 国产在线视频资源 | 久久精彩 | 狠狠干狠狠色 | 久艹在线免费观看 | 欧美激情综合五月色丁香 | 91高清完整版在线观看 | 国产免费又爽又刺激在线观看 | 国产精成人品免费观看 | 99麻豆视频 | 久久国产亚洲视频 | 国产精品成人av电影 | 96久久欧美麻豆网站 | 久久99国产精品久久 | 伊人狠狠操 | 五月av在线 | 18网站在线观看 | 黄色小说视频在线 | 黄网站免费大全入口 | 丁香花在线视频观看免费 | 狠狠操导航| 中文字幕第一页在线 | 精品国产91亚洲一区二区三区www | 不卡视频一区二区三区 | 国产精品久久久免费 | 人人看人人草 | 日韩精品视频免费在线观看 | 国产精品欧美日韩在线观看 | 九九热精品视频在线观看 | 在线观看黄色的网站 | 成人黄色视 | 国产日产精品一区二区三区四区的观看方式 | 美腿丝袜av | 亚洲精品免费观看 | 免费av网站在线看 | 欧美亚洲免费在线一区 | 欧美 亚洲 另类 激情 另类 | 97在线视频免费看 | 国产精品久久久久婷婷二区次 | 久久人人爽视频 | 丁香六月在线观看 | 综合五月婷婷 | 国产精品免费一区二区三区在线观看 | 色a在线观看 | 国产精品丝袜 | 婷婷www | 国内精品久久久久影院一蜜桃 | 国产欧美日韩一区 | 丁香在线观看完整电影视频 | 98超碰在线 | 欧美色精品天天在线观看视频 | 在线国产能看的 | 国产精品久久久区三区天天噜 | 深爱激情五月婷婷 | 久久久99精品免费观看乱色 | 日本精品va在线观看 | 国产精品美女免费看 | 丁香婷婷激情 | 三三级黄色片之日韩 | 天天插日日插 | 99久久精品国产系列 | 久久久伊人网 | 蜜臀av性久久久久av蜜臀妖精 | 亚洲综合激情小说 | 欧美黄色软件 | 国产91勾搭技师精品 | 激情欧美xxxx | av一级片网站 | 香蕉视频在线播放 | 成人免费看片98欧美 | 亚洲国产成人在线观看 | 久草免费电影 | 成人黄大片 | 天天操福利视频 | 色婷婷电影 | 亚洲在线 | 麻豆系列在线观看 | 在线性视频日韩欧美 | 国产理论一区二区三区 | 狠狠的日 | 成年人天堂com | 午夜精品区 | 韩日av一区二区 | 8x成人免费视频 | 国产午夜精品视频 | 国产 中文 日韩 欧美 | 伊人网av | 99在线观看视频网站 | 99精品国产免费久久久久久下载 | 在线视频精品 | 蜜臀av免费一区二区三区 | 中文在线www | 日本护士三级少妇三级999 | www看片网站| 久久久久久精 | 九九国产视频 | 国产成人高清av | 国模视频一区二区三区 | 日韩电影在线观看一区 | 国产精品99久久久久久人免费 | 福利网在线 | 天天干天天干天天色 | 8x成人免费视频 | 黄色一及电影 | 麻豆久久一区二区 | 日韩中文字幕国产 | 99亚洲国产 | 91黄色小视频 | 精品在线小视频 | 国产精品一区欧美 | 免费在线国产黄色 | 婷婷六月天综合 | 黄色天堂在线观看 | 五月天婷婷在线播放 | 高清不卡一区二区三区 | 9992tv成人免费看片 | 国产高清免费在线观看 | 婷婷激情五月 | 亚洲2019精品 | 日韩免费观看视频 | 色综合欧洲 | 黄色免费在线看 | 国产精品国内免费一区二区三区 | 97夜夜澡人人双人人人喊 | 欧美日韩精品免费观看 | 中文字幕资源网 国产 | 99久久99热这里只有精品 | 日本精品一区二区 | 网站免费黄 | 亚洲国产免费网站 | 日本特黄特色aaa大片免费 | 伊人六月| 免费在线激情电影 | 婷婷网站天天婷婷网站 | 亚洲国产电影在线观看 | 色免费在线 | 久久久久观看 | 久久精品日产第一区二区三区乱码 | 99视频在线观看一区三区 | 国产精品久久人 | 欧美日韩免费在线视频 | 日韩av综合网站 | 久久精品视频网 | 国内精品久久久久国产 | 午夜三级在线 | 国产美女在线免费观看 | 国产精品一区二区三区视频免费 | 探花视频在线观看 | 久久a级片 | 国内99视频 | 国产精品专区在线观看 | 国产在线观看你懂的 | h久久| 人人爽爽人人 | 欧美一区二区在线免费观看 | 国产91精品一区二区麻豆亚洲 | 久久久久欠精品国产毛片国产毛生 | 色综合久久精品 | 欧美色图东方 | 夜夜干夜夜 | 97超碰人人在线 | 国产精品99久久久久久久久 | 亚洲欧洲日韩 | 国产永久免费 | 精品国偷自产在线 | 国产在线观看免费 | 91禁看片 | av在线日韩 | 日本 在线 视频 中文 有码 | 日韩影视大全 | 欧洲黄色片 | 亚洲精品国产精品乱码在线观看 | 97超碰总站 | aav在线 | 亚洲欧美日韩一区二区三区在线观看 | 免费高清在线视频一区· | 999久久国精品免费观看网站 | 日韩av成人| 国产手机av在线 | 久草精品视频在线看网站免费 | 九色视频网址 | 三级黄色在线 | 中文字幕在线观看视频一区 | 国产精品久久久久av | 国产成人综合精品 | 一级免费看视频 | 看片网站黄色 | 久久婷婷一区二区三区 | 美女黄频视频大全 | av成人在线观看 | 81精品国产乱码久久久久久 | 午夜少妇av | 97在线观视频免费观看 | 一区二区三区日韩在线 | 一区二区网 | 少妇做爰k8经典 | 美州a亚洲一视本频v色道 | 狠狠色丁香婷婷综合视频 | 国产精品久久久久久久久久免费看 | 国产精品高潮呻吟久久av无 | 成人免费在线观看av | 欧美精品一二 | 91精品啪在线观看国产81旧版 | 一级性生活片 | 欧洲成人av| 欧美日韩免费网站 | 色噜噜狠狠狠狠色综合 | 91视频在线免费 | 久久久久久国产精品美女 | 国产精品毛片久久 | 精品国产一区二区三区久久久 | 国产不卡毛片 | 中国精品一区二区 | 免费www视频 | 中文字幕在线网 | 亚洲精品国产综合99久久夜夜嗨 | 国产又黄又猛又粗 | 免费观看黄色av | 日韩免费二区 | 2024国产精品视频 | 黄色av免费在线 | 久久久久久久久久久国产精品 | 精品国产乱码久久久久久三级人 | 免费看的黄色录像 | 99久久99久国产黄毛片 | 亚洲精品xxxx | 亚洲精品国产精品国自产观看 | 欧美在线视频一区二区三区 | 午夜色影院 | 视频国产在线观看18 | 91视频在线观看下载 | 九九免费观看全部免费视频 | 丁香视频| 国产精品久久久久免费a∨ 欧美一级性生活片 | 激情五月婷婷综合网 | 国产中文字幕三区 | 夜夜躁日日躁狠狠久久av | 成 人 黄 色视频免费播放 | 日韩一区二区免费播放 | 日日干天天射 | 九九爱免费视频在线观看 | 成人在线视频网 | 国产v视频 | 九九有精品 | 国产成人三级一区二区在线观看一 | 视频国产在线观看18 | 成人一区二区三区中文字幕 | 99久久精品午夜一区二区小说 | 国产一线二线三线性视频 | 亚洲日本va午夜在线电影 | 一区三区视频在线观看 | 9999在线视频 | 国产福利精品在线观看 | 免费看黄网站在线 | 五月婷婷在线视频观看 | 色先锋资源网 | 狠色狠色综合久久 | 欧美性生活大片 | 亚洲黄污| 欧美日韩国产免费视频 | 国产精品免费麻豆入口 | www黄免费 | 国产高清视频免费在线观看 | 国产美女免费视频 | 久久综合色天天久久综合图片 | 在线视频1卡二卡三卡 | 久久精品一级片 | 久久69精品久久久久久久电影好 | 免费a v观看 | 亚洲精品一区二区18漫画 | 日本中文字幕影院 | 成人av动漫在线 | 国产最新在线观看 | 亚洲涩综合 | 在线国产片| 国产亚洲欧美精品久久久久久 | 婷婷五天天在线视频 | 亚洲最快最全在线视频 | 国产福利小视频在线 | 日韩最新av在线 | 在线精品视频免费观看 | 国产原创在线 | 狠狠网亚洲精品 | 国产一级在线观看视频 | 国产麻豆视频免费观看 | 国产黄色一级大片 | 欧美aaa级片| 日韩大片在线免费观看 | 天天综合色天天综合 | 日韩色综合 | 三上悠亚在线免费 | 免费看国产视频 | 日韩在线观看一区二区 | 欧美日韩免费观看一区二区三区 | 国产精品无av码在线观看 | www.精选视频.com | 激情网站网址 | 在线免费观看视频a | 韩国av免费在线观看 | 五月开心六月婷婷 | 国产午夜精品一区二区三区欧美 | 亚洲va欧美va | a在线v| 日韩视频三区 | 91看成人| 免费观看黄色12片一级视频 | av在线免费播放网站 | 国产精品99蜜臀久久不卡二区 | 麻豆免费观看视频 | 国产精品一区二区三区四区在线观看 | 日韩电影久久久 | 香蕉视频在线看 | 精品久久久久国产免费第一页 | 在线观看精品黄av片免费 | 国产精品久久久久一区二区三区共 | 天天草天天色 | 毛片网站在线看 | 欧美五月婷婷 | 欧美日本中文字幕 | 国产亚洲精品日韩在线tv黄 | 国产涩涩网站 | 亚洲欧美日韩国产精品一区午夜 | 99视频久久 | 一区二区伦理 | 91porny九色在线播放 | 欧美一性一交一乱 | 国产在线精品视频 | 伊香蕉大综综综合久久啪 | 激情图片久久 | 深爱五月网 | 天天操天天干天天综合网 | 国产精品美女久久久久久 | 狠狠操精品 | 中文字幕日韩av | 欧美一区二区三区四区夜夜大片 | 国产精品一区电影 | 欧美精品久久久久久久免费 | 天天天天综合 | 欧美精彩视频在线观看 | 亚洲精品高清在线观看 | 91爱爱电影 | 婷婷激情影院 | 在线观看免费高清视频大全追剧 | 亚洲经典视频 | www.香蕉视频在线观看 | 日韩免费在线网站 | 日韩国产高清在线 | 天天射天天干天天操 | 91av99 | 超碰精品在线观看 | 六月激情久久 | 精品欧美小视频在线观看 | 最近免费中文字幕mv在线视频3 | 久久久久综合网 | 国产99在线 | 久久9精品 | 在线观看亚洲精品视频 | 在线观看亚洲精品视频 | 九九免费在线观看 | 狠狠五月婷婷 | 久久综合桃花 | 亚洲精品在线看 | 久久国语露脸国产精品电影 | 国产在线一线 | 久久久91精品国产一区二区三区 | 天堂中文在线视频 | aaa免费毛片 | 欧美中文字幕久久 | 韩国三级一区 | 久久亚洲美女 | 欧美99精品 | 久草在线欧美 | 91精品久 | 国产小视频在线播放 | 夜夜躁日日躁狠狠久久av | 91香蕉视频黄 | 日日夜夜精品视频天天综合网 | 国产精品99久久久久 | 99精品国产免费久久 | 日韩精品久久久久久 | www.91国产 | 天天操天天摸天天干 | 美女一级毛片视频 | 欧美a级在线 | 日韩日韩日韩日韩 | 欧美夫妻生活视频 | 国产 日韩 欧美 自拍 | 国产无套精品久久久久久 | av黄色大片 | 99精品久久99久久久久 | 精品久久久久久久久久久久久久久久久久 | 免费视频三区 | 中文字幕人成不卡一区 | 不卡的av在线播放 | 日本视频不卡 | 久久国产精彩视频 | 亚洲色五月 | 国产美女网站在线观看 | 黄色a一级片 | 黄a在线观看| 97日日碰人人模人人澡分享吧 | 色播五月婷婷 | 国产黑丝袜在线 | 手机看片中文字幕 | 午夜在线日韩 | av在线免费网 | 精品日韩在线 | 久久国产福利 | 四虎天堂 | a午夜电影 | 国产又黄又硬又爽 | 91高清完整版在线观看 | 狠狠色丁香久久婷婷综合丁香 | 中文在线免费观看 | 丁香花在线观看视频在线 | 婷婷在线色 | 日韩精品免费在线观看视频 | 久久久久久久99精品免费观看 | 日韩在线视频在线观看 | 玖玖视频免费在线 | 国产视| 成人毛片在线视频 | 国产精品观看在线亚洲人成网 | 亚洲免费在线播放视频 | 丁香激情视频 | 亚洲精品高清一区二区三区四区 | 91av蜜桃| 热久在线 | 日韩中文字幕第一页 | 久久成人免费视频 | 夜又临在线观看 | 麻豆影视在线免费观看 | 色中色亚洲 | 精品999在线观看 | 五月婷婷激情网 | 99视频精品免费视频 | 成人在线视频观看 | 成人资源在线播放 | 久 久久影院 | 毛片网站在线观看 | 中文字幕在线观看资源 | 色视频网页| 国产xx在线 | 久久久91精品国产一区二区三区 | 超碰97国产精品人人cao | 天天射网 | 日韩高清av | 精品国产一区二区三区在线观看 | 国产小视频免费观看 | 国产精品久久久久久久久费观看 | av在线播放亚洲 | 免费观看黄| 久久国产色 | 久热色超碰 | 国产一区二区三精品久久久无广告 | 日韩在线视频一区二区三区 | 国产成人av福利 | 不卡视频在线 | 精品亚洲视频在线观看 | 国产精品亚州 | 亚洲免费视频观看 | 国产特级毛片aaaaaa高清 | 最近高清中文字幕 | 国产精品久久久久免费观看 | 黄色亚洲大片免费在线观看 | 日韩精品在线免费观看 | 97视频免费观看2区 亚洲视屏 | 国产午夜精品理论片在线 | 曰本免费av | 夜夜躁狠狠躁 | 日本三级久久 | 免费在线视频一区二区 | 久久激情小视频 | 成人一级电影在线观看 | 女人18精品一区二区三区 | 欧美激情视频一二区 | 久久久黄视频 | 伊人影院av | av黄色在线| 911精品视频 | 国产高清视频免费最新在线 | 91成人免费观看视频 | 亚洲精品高清视频 | 91新人在线观看 | 五月亚洲| 亚洲欧美精品一区二区 | 在线观看日韩精品视频 | 免费亚洲一区二区 | 婷婷丁香色 | 国产精品网在线观看 | 日韩精品免费在线观看 | 成人性生活大片 | 99热在线这里只有精品 | 久久蜜臀一区二区三区av | 丁香婷婷电影 | 国内精品久久天天躁人人爽 | www.亚洲黄 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 在线观看一区二区精品 | 婷婷精品国产一区二区三区日韩 | 日韩三级成人 | 色网站黄 | 国产精品第72页 | 日韩欧美在线高清 | 一区二区三区四区五区六区 | 欧美成人黄色片 | 亚洲免费在线看 | 国产a网站 | 欧美在线视频a | 丝袜美女视频网站 | 亚洲精品视频网址 | 九九在线视频免费观看 | 毛片二区 | 中文字幕免费成人 | 欧美夫妻性生活电影 | 国产精品九九九九九 | 一区二区电影在线观看 | 国产最新91 | 欧美午夜性生活 | 91九色免费视频 | 日韩大陆欧美高清视频区 | 日韩一级片大全 | 亚洲激情六月 | 色婷婷国产 | 人人澡人人舔 | 免费h视频| 久久精品成人热国产成 | 国产高清视频在线播放一区 | 久久r精品| 日韩天天干 | 丁香六月综合网 | 日韩免费不卡视频 | 欧美日韩国产色综合一二三四 | 久久女同性恋中文字幕 | 精品国产乱码久久 | 91aaa在线观看 | 久久综合影视 | 三级在线国产 | 久久精品小视频 | 中文字幕在线影院 | 国产一区二区电影在线观看 | 欧美精品乱码久久久久久 | 久久69精品久久久久久久电影好 | 成人网在线免费视频 | 激情电影影院 | 久久精品男人的天堂 | 日日干天天爽 | 国产日韩亚洲 | 日本黄色特级片 | 免费视频区 | 国产精品免费成人 | 日韩欧美在线免费观看 | av黄色一级片 | 69中文字幕 | 色之综合网 | 黄色电影网站在线观看 | 久久永久视频 | 久久艹综合 | 日本精品一区二区三区在线观看 | 国产精品一区二区电影 | 在线精品视频免费观看 | 成人一区二区三区中文字幕 | 波多野结衣亚洲一区二区 | 免费观看国产视频 | 就操操久久 | 免费久久99精品国产 | 日韩精品欧美专区 | 婷婷伊人综合亚洲综合网 | 中文在线中文a | 久久激情影院 | 日韩一级网站 | 91av网址| 91麻豆看国产在线紧急地址 | 最近免费观看的电影完整版 | 亚洲欧美在线视频免费 | 97在线观看免费观看 | 亚洲精品玖玖玖av在线看 | 天天看天天干 | 国产成人亚洲在线观看 | av不卡中文字幕 | 久久99国产精品自在自在app | 婷婷色亚洲 | 国语精品免费视频 | 欧美一级电影片 | av不卡免费看 | 中文av在线免费观看 | 日韩在线二区 | 国产无吗一区二区三区在线欢 | 特级毛片爽www免费版 | 超碰人人做 | 国产亚洲人 | 91精品老司机久久一区啪 | 美国av片在线观看 | 性色av免费看 | av在线激情 | 国产精品二区在线 | 亚洲人成网站精品片在线观看 | 久久激五月天综合精品 | 九色精品免费永久在线 | www.xxxx变态.com| 亚洲精品国久久99热 | 欧美成人在线免费观看 | 免费精品视频在线 | 国产成人精品女人久久久 | 中文字幕日韩高清 | 亚洲成人黄色网址 | 黄色免费网 | 麻花豆传媒一二三产区 | 国产成人av电影在线观看 | 欧美精品一区二区三区四区在线 | 欧美激情精品久久久 | av在观看 | 一区二区三区免费在线观看 | 国产精品网红福利 | 国产黄色片一级三级 | 久草在线国产 | 国产精品久久艹 | 国产色婷婷在线 | 久久婷婷一区二区三区 | 婷婷丁香六月 | 欧美精品国产综合久久 | 国产精品久久久久一区二区 | 在线 影视 一区 | 国产免费一区二区三区网站免费 | 91香蕉国产在线观看软件 | 77国产精品 | 九九九九九国产 | 久久久久国产一区二区三区 | 天天激情站 | 国产黄色大片免费看 | 中文字幕婷婷 | 最近中文字幕视频完整版 | 色妞久久福利网 | 欧美另类xxx| 在线一区电影 | 黄色软件在线观看视频 | 99精品视频在线 | 99热在线这里只有精品 | 99国产视频 | 欧美色婷 | 午夜私人影院久久久久 | 天天操网站 | 亚洲aⅴ在线观看 | 欧美日韩一区久久 | 亚洲免费婷婷 | 美女网站在线观看 | 中文字幕资源在线观看 | 五月婷婷在线综合 | 丁香激情综合 | 欧美91成人网 | 久久不卡国产精品一区二区 | 97视频免费播放 | 在线 影视 一区 | av中文字幕在线免费观看 | 九九九在线 | 91亚洲精品乱码久久久久久蜜桃 | 99热在线免费观看 | 爱爱一区 | 国产一区在线免费观看 | 国产亚洲欧美在线视频 | 日韩欧美精品在线 | 亚洲成年人在线播放 | 亚洲一区视频在线播放 | 日韩在线视 | 亚洲综合激情小说 | 日精品在线观看 | 综合国产在线观看 | 日韩手机在线观看 | 性色av香蕉一区二区 | 久草观看 | 福利一区二区在线 | 日本成人中文字幕在线观看 | 日韩视频在线播放 | www免费视频com━ | 草久久久久久 | 日日插日日干 | 91精品推荐 | 国产精品久久久久久久久久妇女 | 免费看黄20分钟 | 又黄又刺激 | 美女在线观看av | 精品久久久久久久久久久久久 | 婷婷射五月 | 一区二区三区韩国免费中文网站 | 91精品视频一区二区三区 | 色九九在线 | 一本色道久久精品 | 日本少妇高清做爰视频 | av亚洲产国偷v产偷v自拍小说 | 91一区二区三区久久久久国产乱 | 日本精品久久久久中文字幕5 | 日韩精品免费在线 | 亚洲国产综合在线 | 亚州人成在线播放 | 肉色欧美久久久久久久免费看 | 精品久久久久久久久久久久久久久久久久 | 激情久久伊人 | 欧美一区影院 | av永久网址 | 日韩欧美国产激情在线播放 | 免费成人短视频 | 黄色的片子 | 狠狠狠狠狠操 | 国内外激情视频 | 精品视频久久 | 涩涩色亚洲一区 | 午夜久久福利 | 免费一级片观看 | 国产福利免费在线观看 | 精品成人国产 | 18性欧美xxxⅹ性满足 | 在线国产视频一区 | 亚洲国产免费看 | 成人av亚洲 | 亚洲精品久久久蜜臀下载官网 | 亚洲精品中文在线 | 中文字幕免费观看 | 亚洲国产精品成人女人久久 | 国产精品视频永久免费播放 | 国产黄a三级三级三级三级三级 | 天天干夜夜爽 | 色欧美88888久久久久久影院 | 日日干天天干 | 草 免费视频 | 亚洲精品色婷婷 | 91中文字幕网 | 伊人国产视频 | 国产一区二区午夜 | 色综合久久悠悠 | 麻豆视频免费在线播放 | 91亚州 | 996久久国产精品线观看 | 又黄又色又爽 | 日韩69av | 超碰在线日韩 | 69视频网站 | 精品久久精品久久 | 精品麻豆 | 日韩三级久久 | 97精品超碰一区二区三区 | 狠狠做深爱婷婷综合一区 | 99热国产在线中文 | 国产在线精品区 | 中文字幕在线视频第一页 | 亚州免费视频 | 日韩r级电影在线观看 | 欧洲亚洲国产视频 | 91在线区 | 欧美精选一区二区三区 | 日韩激情在线视频 | 欧美精品一区在线发布 | 久久精品视频在线看 | 久久久久久久久久久免费 | 日韩av电影中文字幕在线观看 | 久久综合五月 | 特级西西www44高清大胆图片 | 激情视频在线观看网址 | 久久久久亚洲精品成人网小说 | 欧美精选一区二区三区 | 精品一区久久 | 爱爱一区 | 成人免费色 | 久草在线视频在线 | 精品国产诱惑 | 成人在线观看影院 |