2017軟件工程實踐第二次作業

1、 項目地址:https://github.com/one-piece-zero/sudoku

2、PSP表格記錄的估計耗時
1226437-20170910165908460-1976844582.png

3、解題思路:

  • 在拿到這個題目的時候,我最早想到的是大一下學期做的程序語言綜合設計實踐中的N皇后問題,這兩個題目之間有許多的類似之處,行列不能重復,對于這次的題目來說,宮內的數字不能重復,對于N皇后問題來說,斜線部分不能重復。于是我拿起了大一時的解題報告來與這個題目一起分析。首先,對于左上角數字是固定的,那么就可以初始化左上角的數字,然后從第一行的后八位,運用srand函數產生的隨機數,運用random_shuffle函數隨機排列,第一行的數字分好之后,就從第二行的第一個數開始,隨機產生,通過標記flag的值來判斷是否與上下左右有所重復,若有所重復,則跳出循環,另取數重新開始,而宮內的數字則通過與前后左右還有3這個倍數的關系來進行檢測,這個題目中,我用到了回溯法,當遇到沖突時,就返回上一個步驟,去新數來填,直到整個數獨矩陣完成,N皇后問題當初也是用的回溯法解決的,在這次實踐中又用到了,還是有所收獲的。

4、設計實現過程:

  • 在開始的時候,拿到這個題目,想到了當初的N皇后問題,所以理所當然的想到了回溯法,在這次的代碼中,我只寫了一個函數,這個函數是用來完成整個數獨的,我在主函數中先將數獨矩陣的第一行完成,接著調用函數,在函數中采用回溯法一步一步完成整個數獨矩陣。

5、代碼說明
1226437-20170910171718835-1686775021.png
主要思路在注釋中有體現

6、運行測試
1226437-20170910171924585-1380253109.png
1226437-20170910171940101-509986057.png

7、性能分析圖
1226437-20170910173126960-1729171549.png

  • 從圖中可以看出,在這次代碼中有兩個函數,main主函數和find函數,而明顯的主函數占用的CPU要遠遠高于find函數,而此次使用了回溯算法,所以時間復雜度會較搞一些,對于較大的數字會處理的較慢些。

8、PSP表格記錄的實際耗時
1226437-20170910173536929-1027733534.png

轉載于:https://www.cnblogs.com/one-piece-zero/p/7501501.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454697.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454697.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454697.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CentOS7 安裝或遷移 wordpress(完整遷移)

一、安裝Apache web服務器 安裝Apache web服務器: yum install -y httpd # 使用yum安裝 systemctl start httpd # 啟動Apache服務器 systemctl enable httpd # Apache服務器開機后自動啟動 使用瀏覽器打開http://127.0.0.1檢查Apache安裝是否成功。成功后…

WinForm部署問題

WinForm部署問題 1、解決:This implementation is not part of the Windows Platform 問題? 一:單擊 開始 ,單擊 運行 ,鍵入 gpedit.msc ,然后單擊 確定 。    二:依次展開 計算機配置 &…

oracle 未找到段的存儲定義,Exp-00003 no storage definition found issue in oracle 11g (未找到段 (0,0) 的存儲定義)...

連接到: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,Data Mining and Real Application Tes已導出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集服務…

signal軟件如何退出賬號_超好用的手機視頻剪輯軟件Videoleap內購分享

注意事項【必讀】:1.必須按照下面的教程操作,教程講的很詳細。2.如果遇到帳號密碼錯誤,先看本頁面新密碼再登陸,別亂試密碼。3.如果手機上有你購買的這個軟件,請先卸載,再用我們的蘋果id登陸下載&#xff0…

MySQL 常用內置函數

MySQL官方文檔:https://dev.mysql.com/doc/refman/5.6/en/func-op-summary-ref.html MySQL數據庫提供了很多函數包括 一、數學函數 二、字符串函數 三、日期時間函數 四、聚合函數(常用于GROUP BY從句的SELECT查詢中) 五、條件判斷函數 六、系統信息函數 七、…

python之eval函數,map函數,zip函數

eval(str)函數很強大,官方解釋為:將字符串str當成有效的表達式來求值并返回計算結果。所以,結合math當成一個計算器很好用。 eval()函數常見作用有: 1、計算字符串中有效的表達式,并返回結果 >>> eval(pow(2,…

第一個servlet小程序

第一個servlet小程序 com.fry.servlet.HelloServlet 1 package com.fry.servlet;2 3 import javax.servlet.ServletException;4 import javax.servlet.http.HttpServlet;5 import javax.servlet.http.HttpServletRequest;6 import javax.servlet.http.HttpServletResponse;7 im…

騰訊校園招聘面試的秘密

轉自公司同事戴釗的文章 由于從事基層管理崗位的原因,最近兩年有機會在武漢、南京、上海等地進行校園招聘,為公司選拔優秀人才,在這個過程中接觸過一百多名各種類型的應聘畢業生,我深深為這些莘莘學子渴望進入騰訊的熱情所感動&am…

win10開啟oracle服務器配置,Windows環境(Win10)下安裝、配置服務器類Oracle Database 11g Release 2...

該篇為服務器類Oracle Database 11gRelease 2的安裝、配置,若需安裝、配置桌面類(通常是選擇桌面類,如果是將本機作為服務器來使用,則選擇服務器類),可參考“Windows環境(Win10)下安裝、配置桌面類Oracle Database 11g Release 2”…

簡單的機器學習程序_人體動作識別小程序【機器學習 人工智能】

人體動作識別(Human activity recognition)是健康領域一個熱點問題,它通過加速度計,陀螺儀等傳感器記錄人體運動數據,對人體動作進行識別。最近用微信小程序做了一個動作識別的項目,同時嘗試部署了單片機。首先奉上b站的視頻鏈接&…

python基礎查漏補缺1--算數、字符串與變量

1. math相關函數 函 數描 述ceil(x) 大于或等于x的整數cos(x)  x的余弦 degrees(x)將x的弧度轉換為度數exp(x)e的x次方factorial(n)計算n的階乘(n!),n 必須為整數log(x)以e為底的x的對數log(x,b)以b為底的x的對數pow(x,y)x的y次方radians(s)將x轉換為弧度數sin(x)x的正弦…

CSS布局說——可能是最全的

前言 現在,我們被稱為前端工程師。然而,早年給我們的稱呼卻是頁面仔。或許是職責越來越大,整體的前端井噴式的發展,使我們只關注了js,而疏遠了css和html。 其實,我們可能經常在聊組件化,咋地咋地…

php dingo和jwt,dingo配合laravel、JWT使用

介紹:dingo api包是給laravel和lumen提供的Restful的工具包,它可以與jwt組件一起配合快速的完成用戶認證,同時對于數據和運行過程中所產生的異常能夠捕獲到并且可以做出對應的響應。dingo文檔地址:https://github.com/dingo/api/w…

重啟開源,分享無限--微軟面試187題精選

重啟開源,分享無限--誠邀你加入微軟面試187題的解題中 前期回顧 我想,只要是稍微瀏覽過我博客的朋友都知道,本博客內總體上大致分為兩個部分的內容:1、算法(如十六個經典算法研究系列);2、面試與…

二三星縮水軟件手機版_還在抱怨三星手機不好用?用這些軟件立馬解決

S10系列上市讓三星在國內的銷量有所回暖,但是很多小伙伴拿到手機后都在吐槽三星的軟件工程師不行,比如手勢操作太難用了,不如小米人性化。其實這只是你沒找到秘訣而已,三星手機原來還可以這樣使用?三星有一個官方軟件&…

使用Settings Bundle為程序添加設置項

創建一個Demo來學習一個Setting Bundle為程序存儲設置項 Settings Bundle是在自己的程序中建立的一組文件,利用它可以告訴設備中的Settings程序我們寫的程序有哪些設置項。用戶在Settings程序中設置好相關相關選項后回到我們自己的程序,自己的程序中的對…

Netty自娛自樂之協議棧設計

---恢復內容開始--- 俺工作已經一年又6個月了,想想過的真快,每天寫業務,寫業務,寫業務......。然后就是祈禱著,這次上線不要出現線上bug。繼續這每天無聊的增刪改查,學習學習一下自己感興趣的事&#xff0c…

Linux 狀態命令之磁盤狀態 df du

df df(disk free)命令用于顯示目前在 Linux 系統上的文件系統磁盤使用情況統計。獲取硬盤被占用了多少空間,目前還剩下多少空間等信息,如果沒有文件名被指定,則所有當前被掛載的文件系統的可用空間將被顯示。 默認情…

C++包擴展_利用 MATLAB Coder 將M代碼生成C/C++代碼

利用MATLAB Coder將MATLAB代碼生成C/C代碼?mp.weixin.qq.comMATLAB Coder 可以將MATLAB代碼生成工程中常用的嵌入式或其他硬件平臺的C或者C代碼。使用者可以在MATLAB中進行驗證,然后將生成后的代碼集合到工程中。集合的方式可以是源碼,靜態庫和動態庫。…

linux 進程通信機制,linux的進程通信機制小結

linux向應用軟件提供下列進程間通信手段:####第一類通信方式:只能用于父進程與子進程之間,或者兩個兄遞進程之間。>管道Pipe>信號Signal>跟蹤Trace管道:由父進程來建立。管道兩端的進程各自都將該管道視作一個文件。一個…