日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Sudoku Killer(HDU-1426)

發(fā)布時(shí)間:2025/3/17 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sudoku Killer(HDU-1426) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Problem Description

自從2006年3月10日至11日的首屆數(shù)獨(dú)世界錦標(biāo)賽以后,數(shù)獨(dú)這項(xiàng)游戲越來越受到人們的喜愛和重視。

據(jù)說,在2008北京奧運(yùn)會(huì)上,會(huì)將數(shù)獨(dú)列為一個(gè)單獨(dú)的項(xiàng)目進(jìn)行比賽,冠軍將有可能獲得的一份巨大的獎(jiǎng)品———HDU免費(fèi)七日游外加lcy親筆簽名以及同hdu acm team合影留念的機(jī)會(huì)。

所以全球人民前仆后繼,為了獎(jiǎng)品日夜訓(xùn)練茶飯不思。當(dāng)然也包括初學(xué)者linle,不過他太笨了又沒有多少耐性,只能做做最最基本的數(shù)獨(dú)題,不過他還是想得到那些獎(jiǎng)品,你能幫幫他嗎?你只要把答案告訴他就可以,不用教他是怎么做的。

數(shù)獨(dú)游戲的規(guī)則是這樣的:在一個(gè)9x9的方格中,你需要把數(shù)字1-9填寫到空格當(dāng)中,并且使方格的每一行和每一列中都包含1-9這九個(gè)數(shù)字。同時(shí)還要保證,空格中用粗線劃分成9個(gè)3x3的方格也同時(shí)包含1-9這九個(gè)數(shù)字。

Input

本題包含多組測(cè)試,每組之間由一個(gè)空行隔開。每組測(cè)試會(huì)給你一個(gè) 9*9 的矩陣,同一行相鄰的兩個(gè)元素用一個(gè)空格分開。其中1-9代表該位置的已經(jīng)填好的數(shù),問號(hào)(?)表示需要你填的數(shù)。

Output

對(duì)于每組測(cè)試,請(qǐng)輸出它的解,同一行相鄰的兩個(gè)數(shù)用一個(gè)空格分開。兩組解之間要一個(gè)空行。<br>對(duì)于每組測(cè)試數(shù)據(jù)保證它有且只有一個(gè)解。

Sample Input

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

Sample Output

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

思路:行列判斷好解決,但區(qū)域判斷不好處理,使用dfs,先判斷行列,若行列成立再判斷區(qū)域。

Source Program

#include<bits/stdc++.h> using namespace std; int a[10][10]; int ans,tot,flag;struct pointer {int x;int y;int step; }save[1000];int dfs(int x,int y) {int i,j;if(flag==1)return 0;if(ans==(tot+1)){for(i=1;i<=9;i++){for(j=1;j<=9;j++){if(j<9)printf("%d ",a[i][j]);elseprintf("%d",a[i][j]);}cout<<endl;}flag=1;return 0;}int row[10],line[10];memset(row,0,sizeof(row));memset(line,0,sizeof(line));for(i=1;i<=9;i++){if(a[x][i]!=0)//判斷行row[a[x][i]]=1;if(a[i][y]!=0)//判斷列l(wèi)ine[a[i][y]]=1;}int x1=(x/4)*4,y1=(y/4)*4,flag1=0,k,t;//for(i=1;i<=9;i++){if(row[i]&&line[i])continue; //如果行列成立,才往下flag1=0;for(k=x1;k<x1+3;k++)//判斷區(qū)域{for(t=y1;t<y1+3;t++)if(a[k][t]==i){flag1=1;break;}if(flag==1)break;}if(flag1==0){ans++;a[x][y]=i;dfs(save[ans].x,save[ans].y);a[x][y]=0;ans--;}}return 0; } int main() {int i,j;int k;while(1){k=0;flag=0;ans=1;//記錄找到第幾個(gè)?tot=0;//問號(hào)總數(shù)memset(save,0,sizeof(save));for(i=1;i<=9;i++)for(j=1;j<=9;j++){scanf("%d",&a[i][j]);if(a[i][j]==0)//輸入?,會(huì)變成0{tot++;k++;/*記錄問號(hào)*/save[k].x=i;save[k].y=j;}cin.get();}dfs(save[1].x,save[1].y);cout<<endl;} }

?

總結(jié)

以上是生活随笔為你收集整理的Sudoku Killer(HDU-1426)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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