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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

数独挑战(牛客)

發(fā)布時間:2023/12/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数独挑战(牛客) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈接:登錄—專業(yè)IT筆試面試備考平臺_??途W(wǎng)
來源:??途W(wǎng)
?

數(shù)獨是一種填數(shù)字游戲,英文名叫 Sudoku,起源于瑞士,上世紀(jì) 70 年代由美國一家數(shù)學(xué)邏輯游戲雜志首先發(fā)表,名為 Number Place,后在日本流行,1984 年將 Sudoku 命名為數(shù)獨,即 “獨立的數(shù)字” 的縮寫,意思是 “在每一格只有一個數(shù)字”。

2004 年,曾任中國香港高等法院法官的高樂德 (Wayne Gould) 把這款游戲帶到英國,成為英國流行的數(shù)學(xué)智力拼圖游戲。

?

玩家需要根據(jù) 9×99 \times 99×9 盤面上的已知數(shù)字,推理出所有剩余位置的數(shù)字,并滿足每一行、每一列、每一個粗線九宮格內(nèi)的數(shù)字包含有 1-9 的數(shù)字,且不重復(fù)。

現(xiàn)在給你一個數(shù)獨,請你解答出來。每個數(shù)獨保證有且只有一個解。

輸入描述:

輸入僅一組數(shù)據(jù),共 9 行 9 列,表示初始數(shù)獨(其中 0 表示數(shù)獨中的空位)。

輸出描述:

輸出共 9 行 9 列,表示數(shù)獨的解。注意?末沒有空格。

示例1

輸入

5 3 0 0 7 0 0 0 0 6 0 0 1 9 5 0 0 0 0 9 8 0 0 0 0 6 0 8 0 0 0 6 0 0 0 3 4 0 0 8 0 3 0 0 1 7 0 0 0 2 0 0 0 6 0 6 0 0 0 0 2 8 0 0 0 0 4 1 9 0 0 5 0 0 0 0 8 0 0 7 9

輸出

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

分析:

對于題意:即在列、行以及加粗九宮格三種范圍中找出唯一數(shù)獨解

對于思路:只需要搜索每個處于0值的每種可能,具體思路于代碼注釋中

對于當(dāng)前我個人而言,值得注意的是:對于二維數(shù)組,使用的是g[x][y],其x含義是行,y含義是列,使用二者需要注意。

#include<bits/stdc++.h> using namespace std;int g[11][11];///判斷該(x,y)上的位置對應(yīng)的行、列、對應(yīng)九宮格中是否有重復(fù)的數(shù)字 bool check(int x,int y,int v){for( int i = 0; i < 9; i ++ ){if( g[i][y] == v )return 0;///判斷行if( g[x][i] == v )return 0;///判斷列}int xx = x/3*3,yy = y/3*3;///向下取整的得出當(dāng)前坐標(biāo)對應(yīng)加粗九宮格的開頭坐標(biāo)for( int i = xx; i <= xx+2; i ++ ){for( int j = yy; j <= yy+2; j ++ ){if( g[i][j] == v )return 0;///判斷九宮格}}return 1; }///每個位置都搜索判斷是否為0 為0則check判斷符合條件的數(shù) 不為0則繼續(xù)搜索 void dfs( int x, int y ){if( x == 9 && y == 0 ){///枚舉完成所有的情況for( int i = 0; i < 9; i ++ ){for( int j = 0; j < 9; j ++ ){printf("%d%c",g[i][j],j==8?'\n':' ' );///新學(xué)到的結(jié)尾按情況輸出空格或者換行}}return;}if( y == 9 ){///如果枚舉完一行,則換下一行x+1dfs(x+1,0);}else{///否則每個位置都枚舉判斷是否為0值if( g[x][y] ){dfs(x,y+1);}else if( !g[x][y] ) {///0值則搜索判斷是否符合條件for( int i = 1; i <= 9; i ++ ){if(check(x,y,i)){g[x][y] = i;dfs(x,y+1);g[x][y] = 0;///記得清零回溯}}}} }int main(){for( int i = 0; i < 9; i ++ )for( int j = 0; j < 9; j ++ )cin >> g[i][j];dfs(0,0);return 0; }

總結(jié)

以上是生活随笔為你收集整理的数独挑战(牛客)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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