九宫格数独c语言编程,求用C语言编一个解九宫格数独的程序

满意答案

00e27ab806e4881f8254fe7ae8741834.png

emhw637617

2013.12.30

00e27ab806e4881f8254fe7ae8741834.png

采纳率:59%    等级:12

已帮助:5603人

前两天刚写完,还没优化,已运行通过了.

晕,一维的好麻烦,这个也是碰巧前两天刚写好的,你看着自己修改下

#include

typedef struct

{

int line;

int row;

int num;

}Node;

int main()

{

/*

int a[9][9]={

{4,0,3,6,0,0,0,0,0},

{0,0,0,0,0,1,0,2,4},

{0,1,0,0,4,0,5,0,0},

{0,0,0,9,0,4,0,6,0},

{3,0,2,0,0,0,4,0,9},

{0,7,4,1,0,3,0,0,0},

{0,0,1,0,9,0,0,4,0},

{2,4,0,3,0,0,0,0,0},

{0,0,0,4,0,8,2,0,7}};

*/

int a[9][9]={

{0,0,0,8,0,0,0,6,0},

{8,7,0,0,0,0,0,0,0},

{2,9,0,0,4,1,0,0,5},

{0,0,5,7,0,0,0,0,9},

{0,2,0,0,0,0,0,1,0},

{9,0,0,0,0,4,3,0,0},

{7,0,0,6,1,0,0,9,8},

{0,0,0,0,0,0,0,5,2},

{0,6,0,0,0,9,0,0,0}};

/*

int a[9][9]={

{0,2,0,0,6,0,0,0,0},

{0,9,0,4,0,5,1,3,0},

{0,0,8,7,0,0,0,0,5},

{6,0,0,3,0,0,4,0,0},

{0,0,0,9,0,6,0,0,0},

{0,0,7,0,0,1,0,0,3},

{4,0,0,0,0,7,3,0,0},

{0,8,5,2,0,4,0,7,0},

{0,0,0,0,9,0,0,1,0}};

*/

/*

int a[9][9]={

{0,0,3,0,2,0,0,0,6},

{0,0,2,0,9,0,0,0,4},

{7,0,0,8,0,0,2,0,3},

{0,8,0,0,7,0,5,0,0},

{0,7,0,1,0,6,0,3,0},

{0,0,0,2,0,0,0,9,0},

{4,0,6,0,0,8,0,0,5},

{6,0,0,0,4,0,3,0,0},

{9,0,0,0,1,0,7,0,0}};

*/

int i,j,n,en,flag,y,k=0,x,qu,p,q;

Node b[70];

for(i=0;i<9;i++)

{

for(j=0;j<9;j++)

{

if(!a[i][j])

{

b[k].line=i;

b[k].row=j;

b[k].num=0;

k+=1;

}

}

}

en=k;

/*从b[0]开始试,若b[k].num>9,则k-1,否则k+1*/

for(k=0;k

{

++b[k].num;

i=b[k].line;

j=b[k].row;

a[i][j]=b[k].num;

n=0;

while(n<9&&b[k].num<=9)

{

if(n==i)

{

for(y=0;y<9;y++)

{

if(y==j)

continue;

if(a[n][y]==a[i][j])

flag=1;

}

}

else if(n==j)

{

for(y=0;y<9;y++)

{

if(y==i)

continue;

if(a[y][n]==a[i][j])

flag=1;

}

}

/*判断同一块中有没有相同值*/

qu=3*(i/3)+j/3;

switch(qu)

{

case 0:x=0;

y=0;

break;

case 1:x=0;

y=3;

break;

case 2:x=0;

y=6;

break;

case 3:x=3;

y=0;

break;

case 4:x=3;

y=3;

break;

case 5:x=3;

y=6;

break;

case 6:x=6;

y=0;

break;

case 7:x=6;

y=3;

break;

default :x=6;

y=6;

break;

}

p=x;

q=y;

for(;x

{

for(;y

{

if(x==i&&y==j)

continue;

if(a[x][y]==a[i][j])

{

flag=1;

break;

}

}

if(flag==1)

break;

}

if(flag==1)

{

a[i][j]=++b[k].num;

flag=0;

n=0;

continue;

}

n++;

}

if(b[k].num>9)

{

a[i][j]=b[k].num=0;

k--;

if(k<0)

{

printf("error!\r\n");

return -1;

}

}

else

k++;

}

for(i=0;i<9;i++)

{

for(j=0;j<9;j++)

{

printf("%d",a[i][j]);

}

printf("\r\n");

}

return 1;

}

00分享举报

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值