數獨問題的一種簡單演算法程式碼實現
五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排列測試的演算法。然後又發現自己要寫一個非遞迴的全排列(permutation)也有難度,想了兩天,也沒搞出來,自我BS了一把,感覺這麼基本的演算法都搞不定,還想參加參加ACM/ICPC什麼的,真是不自量力。後來還是挑戰自我思考失敗,只能上網查了一下,發現組合數學(combinatorics)研究了這個東西,給出很多演算法,照那些演算法實現的話相當容易。
最後搞出來還是有一點成就感,程式碼貼出來:
執行結果如下:
把巨集改成9的話,應該可以解決九宮格數獨問題,懶得試,主要是怕不行,沒時間去改……
演算法比較慢,有待改進,可惜大量時間要花在老闆的專案和自己的GRE/TOEFL上,所以沒時間細扣,唉,有悖程式設計師精益求精、鍥而不捨的精神啊,BS一下懶惰的自己……
相關推薦
數獨問題的一種簡單演算法程式碼實現
五一期間無聊時想起去年考研複試有一道上機題目當時沒作出來,於是一時興起想重新拾起看看是當時太緊張,還是自己能力不足。然後發現這道題目還真稍微有些難度,相當於一道數獨問題(sudoku)的簡化版。自己想來想去也只能想到兩種演算法,一種是拿剩餘元素做全排列測試,一種是回溯法測試。最後只實現了一個全排
【資料結構】十一種排序演算法C++實現
練習了十一種排序演算法的C++實現:以下依次為,冒泡、選擇、希爾、插入、二路歸併、快排、堆排序、計數排序、基數排序、桶排序,可建立sort.h和main.cpp將程式碼放入即可執行。如有錯誤,請指出更正,謝謝交流。 // sort.h # include <
Activity任務棧的管理 -----銷燬前一個相同的activity(還有一種簡單的方法實現)
需求:介面A跳轉到介面B,之後再跳轉到介面A,此時需要銷燬第一次建立的介面A,以此類推…. 思路:(在每次建立當前Activity的時候銷燬前部的activity即可,然後在添加當前activity的引用) 編寫ActivityManagement的
輪詢演算法的一種簡單實現
輪詢演算法(Round-Robin) 輪詢演算法是最簡單的一種負載均衡演算法。它的原理是把來自使用者的請求輪流分配給內部的伺服器:從伺服器1開始,直到伺服器N,然後重新開始迴圈。 演算法的優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。
SpringBank 開發日誌 一種簡單的攔截器設計實現
exp bst 一個 pin factory span 之前 system request 當交易由Action進入Service之前,需要根據不同的Service實際負責業務的不同,真正執行Service的業務邏輯之前,做一些檢查工作。這樣的攔截器應該是基於配置的,與Se
LCG(linear congruential generator): 一種簡單的隨機數生成演算法
目錄 LCG演算法 python 實現 LCG演算法 LCG(linear congruential generator)線性同餘演算法,是一個古老的產生隨機數的演算法。由以下引數組成: 引數 m a c X
演算法設計:兩種快速排序程式碼實現
快速排序是一種高效且使用廣泛的排序演算法,在很多語言的標準庫中自帶的排序都是快速排序,所以我們也有必要了解快排的原理以及其實現方法。 快排的大致思想 快速排序實現的重點在於陣列的拆分,通常我們將陣列的第一個元素定義為比較元素,然後將陣列中小於比較元素的數放到左邊,將大於比較元素的放到右邊, 這樣我們就將
實現對gridview刪除行時彈出確認對話方塊的一種簡單方法
首先,在GridView的屬性對框話框中點選“Columns”進入它的“欄位”設計器。接著在“欄位”設計器中選擇以前已加上的那個CommandField“刪除”列,這時在它的屬性列表下會看到一個“將此它段轉換為 TemplateFied”的項,點選將它轉換為TemplateFied列。完後退出該欄位設計器,切
Python實現"快樂的數"的一種方法
寫一個演算法判斷一個數字是不是快樂數 快樂數由下面的過程定義:任何正數,用它數字的平方和替換它,重複這個過程直至結果為1,或者以一個環無線迴圈,環中的正數不包括1。這個過程以1結束就可以認為是快樂的數 Example: Input: 19 Output: true
Python實現"醜數"的一種方法
寫一個程式判斷給定的整數是否為醜數 醜數就是隻包含質因數 2, 3, 5 的正整數 Example 1: Input: 6 Output: true Explanation: 6 = 2 × 3 Example 2: Input: 8 Output: true E
關於資料結構演算法中的比較排序(一)(附Java程式碼實現)
現在已經是10月份,秋招正在進行,不知道是不是有的人會和我一樣正在瘋狂的複習起資料結構,在這裡我將就常見的幾種比較排序做一些簡單的解析,同時附上具體的程式碼實現。 1.氣泡排序 氣泡排序通常是我們最先接觸道的比較排序的一種,具體排序步驟如下: 1.比較相鄰的元
String 的一種簡單實現
C++ 的一個常見面試題是讓你實現一個 String 類,限於時間,不可能要求具備 std::string 的功能,但至少要求能正確管理資源。具體來說: 能像 int 型別那樣定義變數,並且支援賦值、複製。 能用作函式的引數型別及返回型別。 能用作標準庫容器的元素型別,
一種簡單的用java實現快速排序(Quicksort)
1,快速排序(Quicksort)是對氣泡排序的一種改進。對資料量越大,資料分佈越混亂的,一般認為是效能最好的。快排是分治思想的一種體現,把大的問題細化成小問題,把小問題細化成更小的問題,最終把問題縮小到一定規模內,可解決。 2,快排演算法思路就是,先取一個數作為關鍵資料(key一般
淺談常見的七種加密演算法及實現(附程式碼)
1. 前言 數字簽名、資訊加密 是前後端開發都經常需要使用到的技術,應用場景包括了使用者登入、交易、資訊通訊、oauth 等等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的 簽名加密演算法來達到業務目標。這裡簡單的給大家介紹幾種常見的簽
Winform下多語言的一種簡單實現
思路:基於c#的Winform程式,涉及到多語言的資源集中到字串和圖片上,資源儲存在資原始檔中,針對每一種語言設定一個資原始檔,介面上的文字和圖片等資源從資原始檔中通過ResourceManager來讀取並設定到介面上。資原始檔的命名與語言名稱對應,通過設定程式的語言環境來實
資料結構演算法程式碼實現——棧和佇列(一)
棧和佇列 棧和佇列是一種特殊的線性表。 從資料結構角度看:棧和佇列也是線性表,其特點性在於棧和佇列的基本操作是線性表操作的子集。它們是操作受限的線性表。 從資料型別角度看:它們是和線性表不相同的兩類重要的抽象資料型別。 棧的定義 棧(Stack)是限
一種簡單的方法在程式中實現透明效果(JAVA)(原始碼)
{ /**//* * 構建imageSrc的拷貝,象素顏色為mask的顯示為透明 * * @param imageSrc 原始影象 * @param mask mask為Object的例項,因為如果imageSrc為灰度圖,或者為索引顏色圖,則mask應為指定
malloc函式的一種簡單的原理性實現
malloc()是C語言中動態儲存管理的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配一個長度為size的連續空間。其引數是一個無符號整形數,返回值是一個指向所分配的連續儲存域的起始地址的指標 malloc()工作機制 malloc函式的實質體現在,它有一個將
Android 滑動驗證的一種簡單實現
VerifyView.java package com.zjl.customview; import java.util.Random; import android.content.Context; import android.graphics.Bitmap;
多執行緒中的全域性資訊統計的一種簡單實現方式(java實現)
如果你學過作業系統,我想你肯定對原子操作不會陌生,著名的哲學家就餐問題大家估計也不會陌生。如果現在有一個多執行緒的程式,有一個公共的訪問變數,那麼想正確的控制這個公共變數的值,每個學過計算機的人的處理方式肯定是使用一些互斥量,或者鎖機制,或者訊號量的方法保證對公共變數的訪問