国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ZCMU-1597-TomCat的數獨

2019-11-11 07:38:24
字體:
來源:轉載
供稿:網友

1597: TomCat的數獨

Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 32  Solved: 17[Submit][Status][Web Board]

Description

都說了TomCat是一只有文化的Cat你還不信。

很久很久以前TomCat就喜歡上了數獨游戲。游戲規則是這樣的,在一個9*9的矩陣里面每一行每一列都由1,2,3,4,5,6,7,8,9這9個數構成,而且每一個3*3的小矩陣里也由1,2,3,4,5,6,7,8,9這9 個數構成(如下圖)。然而TomCat是一只學渣,所以…….你懂的

Input

第一行輸入一個T,表示數據組數。

接下來輸入9*9的矩陣,未知的單位用0表示。(數據保證有唯一結果)

Output

輸出運行結果,格式如下

Sample Input

10 4 6 0 0 1 0 0 07 9 0 3 5 0 6 0 10 0 5 0 9 0 3 2 40 0 0 0 8 0 4 0 50 3 0 2 1 5 0 0 05 8 9 0 0 0 0 7 22 0 0 6 0 9 5 1 01 0 8 5 0 2 0 0 00 5 3 0 4 0 2 0 7

Sample Output

3 4 6 8 2 1 7 5 97 9 2 3 5 4 6 8 18 1 5 7 9 6 3 2 46 2 1 9 8 7 4 3 54 3 7 2 1 5 8 9 65 8 9 4 6 3 1 7 22 7 4 6 3 9 5 1 81 6 8 5 7 2 9 4 39 5 3 1 4 8 2 6 7

HINT

TomCat考慮可以把每一個格子的可能的數字和不可能的數字都列出來與每一行每一列和所在小矩陣進行比較得出結果。

【解析】

這道題要注意的是每一列每一行的的那9個數字都必須不一樣還有就是在9*9的格子當中的每一個從頭開始數的九個3*3的格子中的每一個數也要求不一樣。這道題其實和八皇后問題很相似,這里的輸入9*9的方格的時候0代表這個數沒有確定,而如果非0則表示那個數不用動了,所以我們遞歸搜索下去就好了,還是感覺自己不行...不算難的題也想不到還要靠別人的提醒...

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[9][9];int check(int x,int y,int k){    int p,q,i,j;    p=(x/3)*3;//表示是哪一個3*3的矩陣    q=(y/3)*3;    for(i=0;i<9;i++)    {        if(a[x][i]==k||a[i][y]==k)//判斷那一列或者那一排當中有沒有一樣的            return 0;    }    for(i=p;i<p+3;i++)    {        for(j=q;j<q+3;j++)        {            if(a[i][j]==k)//判斷那個3*3的矩陣                return 0;        }    }    return 1;}void facs(int now){    int p,q,i,j;    p=now/9;    q=now%9;    if(now==81)    {        for(i=0;i<9;i++)        {            for(j=0;j<9;j++)            {                if(j==0)                    PRintf("%d",a[i][j]);                else                    printf(" %d",a[i][j]);            }            printf("/n");        }        return;    }    if(a[p][q]!=0)        facs(now+1);//表示這個數不能改了    else    {        for(i=1;i<10;i++)        {            if(check(p,q,i))            {                a[p][q]=i;                facs(now+1);                a[p][q]=0;            }        }    }}int main(){  int t,i,j;  scanf("%d",&t);  while(t--)  {      for(i=0;i<9;i++)      {          for(j=0;j<9;j++)          {              scanf("%d",&a[i][j]);          }      }      facs(0);  }  return 0;}


上一篇:1058. 選擇題(20)

下一篇:K短路新姿勢

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 青田县| 灵宝市| 定日县| 宝兴县| 吉隆县| 大埔区| 高尔夫| 吉首市| 长寿区| 白银市| 会泽县| 招远市| 十堰市| 海城市| 北碚区| 灯塔市| 布拖县| 方正县| 鸡西市| 大新县| 防城港市| 财经| 邻水| 资兴市| 柘荣县| 涟源市| 思南县| 镇平县| 上饶市| 牟定县| 乌审旗| 博湖县| 缙云县| 永丰县| 马山县| 灌阳县| 巴楚县| 阿拉善盟| 巍山| 白朗县| 云林县|