易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
首页
/
操作系统
/
Linux
/
C语言递归解决数独
运行程序,依次输入数独中的81个数,数独中没有数字的地方输入0,感觉需要输入那么多数太麻烦了,请大家指导如何改的简单一点。
#include<stdio.h>
#include<stdlib.h>
#define DEBUG
int
shukudo[9][9];
typedef
struct
shudo{
int
x;
int
y;
struct
shudo * next;
}shukudo_ptr;
int
count = 0;
void
display_shukudo();
int
check_right(shukudo_ptr*,
int
);
void
solution(shukudo_ptr *empty_ptr)
{
if
(!empty_ptr)
{
display_shukudo();
return
;
}
for
(
int
i = 1; i < 10; ++i)
{
if
(check_right(empty_ptr,i))
{
shukudo[empty_ptr->x][empty_ptr->y] = i;
solution(empty_ptr->next);
}
shukudo[empty_ptr->x][empty_ptr->y] = 0;
}
}
int
check_right(shukudo_ptr *empty_ptr,
int
n)
{
for
(
int
i = 0; i < 9; ++i)
{
if
(shukudo[empty_ptr->x][i] == n)
{
return
0;
}
}
for
(
int
i = 0; i < 9; ++i)
{
if
(shukudo[i][empty_ptr->y] == n)
{
return
0;
}
}
int
start_x = empty_ptr->x / 3 * 3;
int
start_y = empty_ptr->y / 3 * 3;
for
(
int
i = start_x; i < start_x + 3; ++i)
{
for
(
int
j = start_y; j < start_y + 3; ++j)
{
if
(shukudo[i][j] == n)
{
return
0;
}
}
}
return
1;
}
void
display_shukudo()
{
++count;
printf(
"solution %d "
,count);
for
(
int
i = 0; i < 9; ++i)
{
for
(
int
j = 0; j < 9; ++j)
{
printf(
"%d "
,shukudo[i][j]);
}
printf(
" "
);
}
printf(
" "
);
}
int
main(
void
)
{
shukudo_ptr *empty_ptr = NULL;
shukudo_ptr *operate = NULL;
shukudo_ptr *last = NULL;
for
(
int
i = 0; i < 9; ++i)
{
for
(
int
j = 0; j < 9; ++j)
{
printf(
"(%d,%d): "
,i,j);
scanf(
"%d"
,&shukudo[i][j]);
if
(shukudo[i][j] == 0)
{
operate = (shukudo_ptr*)malloc(
sizeof
(shukudo_ptr));
operate->x = i;
operate->y = j;
operate->next = NULL;
if
(!empty_ptr)
{
empty_ptr = operate;
last = empty_ptr;
}
else
{
last->next = operate;
last = operate;
}
}
}
}
solution(empty_ptr);
while
(empty_ptr)
{
operate = empty_ptr;
empty_ptr = empty_ptr -> next;
free(operate);
}
return
0;
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图