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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

数独挑战(牛客)

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

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

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

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

?

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

現(xiàn)在給你一個(gè)數(shù)獨(dú),請(qǐng)你解答出來(lái)。每個(gè)數(shù)獨(dú)保證有且只有一個(gè)解。

輸入描述:

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

輸出描述:

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

示例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

分析:

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

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

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

#include<bits/stdc++.h> using namespace std;int g[11][11];///判斷該(x,y)上的位置對(duì)應(yīng)的行、列、對(duì)應(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)對(duì)應(yīng)加粗九宮格的開(kāi)頭坐標(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; }///每個(gè)位置都搜索判斷是否為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{///否則每個(gè)位置都枚舉判斷是否為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é)

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

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