標題: 超音速解數獨,自行編譯運行(C語言版),按題目輸入就行了。 [打印本頁]
作者: xuwei 時間: 2015-6-13 19:52
標題: 超音速解數獨,自行編譯運行(C語言版),按題目輸入就行了。
此程序多解只出一個解,需要多解請自行修改,或者聯系本人。。。
你一定聽說過“數獨”游戲。如:

玩家需要根據
9×
9盤面上的已知數字,推理出所有剩余空格的數字,并滿足每一行、每一列、每一個同色九宮內的數字均含
1-9,不重復。
數獨的答案都是唯一的,所以,多個解也稱為無解。
本圖的數字據說是芬蘭數學家花了3個月的時間設計出來的較難的題目。但對會使用計算機編程的你來說,恐怕易如反掌了。
本題的要求就是輸入數獨題目,程序輸出數獨的唯一解。我們保證所有已知數據的格式都是合法的,并且題目有唯一的解。
格式要求,輸入9行,每行9個字符,0代表未知,其它數字為已知。
輸出9行,每行9個數字表示數獨的解。
例如:
輸入(即圖中題目):
005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700
程序應該輸出:
145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764
再例如,輸入:
800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400
程序應該輸出:
812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452
代碼如下:
#include<stdio.h>
int ds[9][9],sd[9][9];int temp=0;
void tspd(int a[],int count)
{
inti,j,k;
if(temp)
return;
if(count<0)
{
{for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
printf("%d",ds[ i][j]);
printf("\n");
}printf("\n");}
temp=1;
return;
}
else
{
i=a[count]/10;
j=a[count]%10;
for(k=1;k<=9;k++)
{ int x;
ds[ i][j]=k;
for(x=0;x<9;x++)
if(ds[ i][j]==sd[ i][x]){x=100;break;}
if(x==100)continue;
for(x=0;x<9;x++)
if(ds[ i][j]==sd[x][j]){x=100;break;}
if(x==100)continue;
if(j<8&&ds[ i][j]==ds[ i][j+1])continue;
if(j<7&&ds[ i][j]==ds[ i][j+2])continue;
if(j<6&&ds[ i][j]==ds[ i][j+3])continue;
if(j<5&&ds[ i][j]==ds[ i][j+4])continue;
if(j<4&&ds[ i][j]==ds[ i][j+5])continue;
if(j<3&&ds[ i][j]==ds[ i][j+6])continue;
if(j<2&&ds[ i][j]==ds[ i][j+7])continue;
if(j<1&&ds[ i][j]==ds[ i][j+8])continue;
if(i<8&&ds[ i][j]==ds[i+1][j])continue;
if(i<7&&ds[ i][j]==ds[i+2][j])continue;
if(i<6&&ds[ i][j]==ds[i+3][j])continue;
if(i<5&&ds[ i][j]==ds[i+4][j])continue;
if(i<4&&ds[ i][j]==ds[i+5][j])continue;
if(i<3&&ds[ i][j]==ds[i+6][j])continue;
if(i<2&&ds[ i][j]==ds[i+7][j])continue;
if(i<1&&ds[ i][j]==ds[i+8][j])continue;
if(i<8&&i>5)
{
if(j%3==2&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j+1]||ds[ i][j]==ds[i+1][j+2]))continue;
}
if(i==6)
{
if(j%3==2&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j+1]||ds[ i][j]==ds[i+2][j+2]))continue;
}
if(i<5&&i>2)
{
if(j%3==2&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j+1]||ds[ i][j]==ds[i+1][j+2]))continue;
}
if(i==3)
{
if(j%3==2&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j+1]||ds[ i][j]==ds[i+2][j+2]))continue;
}
if(i<2&&i>=0)
{
if(j%3==2&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j-1]||ds[ i][j]==ds[i+1][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+1][j]||ds[ i][j]==ds[i+1][j+1]||ds[ i][j]==ds[i+1][j+2]))continue;
}
if(i==0)
{
if(j%3==2&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j-2]))continue;
if(j%3==1&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j-1]||ds[ i][j]==ds[i+2][j+1]))continue;
if(j%3==0&&(ds[ i][j]==ds[i+2][j]||ds[ i][j]==ds[i+2][j+1]||ds[ i][j]==ds[i+2][j+2]))continue;
}
tspd(a,count-1);
}
return;
}
}
int main()
{
inti,j,a[81],count=0;
charc;
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
c=getchar();
if(c=='\n')
c=getchar();
ds[ i][j]=(int)(c-'0');
}
for(i=0;i<9;i++)
for(j=0;j<9;j++)
sd[ i][j]=ds[ i][j];
printf("\n");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
if(!ds[ i][j])
a[count++]=i*10+j;
tspd(a,count-1);
return0;
}
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |