日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

web api 数独 求解代码 使用穷举回溯法

發布時間:2024/3/24 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web api 数独 求解代码 使用穷举回溯法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先看效果



首先是html代碼

<!DOCTYPE html> <html lang="zh-cn" data-ng-app="app"> <head><meta http-equiv="Content-" content="text/html; charset=utf-8" /><title>數獨</title><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> </head> <body><!--jquery--><script src="vendor/jquery/jquery-3.1.1.js"></script><script>var pu = [];$(function () {for (var i = 0; i < 81; i++) {$("body").append("<input type='text' class='sd' style='width: 20px; background: red; text-align: center; color: rgb(255, 255, 255);'>")if((i+1)%9==0)$("body").append("<br>")}$("#send").click(function () {pu = [];var sz = [];for (var i = 0; i < 81; i++) {var s = $(".sd:eq(" + i + ")").val().trim() == "" ? 0 : parseInt($(".sd:eq(" + i + ")").val().trim());sz.push(s)}$.get("api/sudu?sd=" + sz.join(","), function (data, textStatus) {console.log(data); // 把返回的數據添加到頁面上var i = 0;$.each(data, function () {var j = 0;$.each(this, function () {$(".sd:eq(" + (i * 9 + (j++)) + ")").val(this)});i++;});})})$('.sd').bind('input propertychange', function () {var nxtIdx = $(".sd").index(this) + 1;$(".sd:eq(" + nxtIdx + ")").focus();if ($(this).val().trim() != ""){$(this).css({ "background": "#fff", "color": "#000" })}});})</script><button id="send" value="計算">計算</button><br> </body> </html>

再是web.api 代碼

using System.Web.Http;namespace Yi.Web.Controllers {public class SuduController : ApiController{// GET api/<controller>int[,] pu = new int[9, 9];bool cg = false;public object Get(string sd){var s = sd.Split(',');for (int i = 0; i < 9; i++){for (int j = 0;j < 9; j++){var su = s[i * 9 + j].Trim();pu[i,j] =int.Parse(su==""?"0":su);}}GetAnswer(pu,0);return pu;}/// <summary>/// 驗證函數/// </summary>/// <param name="i"></param>/// <param name="j"></param>/// <returns></returns>bool IsValid(int i, int j){int n = pu[i, j];int[] query = new int[9] { 0, 0, 0, 3, 3, 3, 6, 6, 6 };int t, u;//每一行每一列是否重復for (t = 0; t < 9; t++){if ((t != i && pu[t, j] == n) || (t != j && pu[i, t] == n))return false;}//每個九宮格是否重復for (t = query[i]; t < query[i] + 3; t++){for (u = query[j]; u < query[j] + 3; u++){if ((t != i || u != j) && pu[t, u] == n)return false;}}return true;}/// <summary>/// 使用回溯算法求解/// </summary>/// <param name="n"></param>void GetAnswer(int[,]pu, int n){if (n == 81){//是否已經是最后一個格子cg = true;return;}int i = n / 9, j = n % 9;if (pu[i, j] != 0){//如果當前格子不需要填數字,就跳到下一個格子GetAnswer(pu,n + 1);return;}for (int k = 0; k < 9; k++){if (!cg){pu[i, j]++;//當前格子進行嘗試所有解if (IsValid(i, j))GetAnswer(pu, n + 1);//驗證通過,就繼續下一個}}if (!cg)pu[i, j] = 0; //如果上面的單元無解,還原,就回溯return;}}}

總結

以上是生活随笔為你收集整理的web api 数独 求解代码 使用穷举回溯法的全部內容,希望文章能夠幫你解決所遇到的問題。

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