解数独(c语言)

数独解题

  1. 问题:输入一个问题数独,输出答案
    输入:9行9列数字x,每一行数字之间没有空格,x范围0-9(0代表空格)
    输出:数独答案
  2. 思路:从(1,1)遍历(9,9)共81个位置,如果(9,9)有数可填,则解决问题。
    1.用ax[x][y],ay[x][y],az[x][y]分别记录x行,x列,x方块中哪些数字y已经被用 0 或者没用 1 ,三者都为 1,表明数字 y 在当前位置可填
    2.对于搜索到一个位置,只会出现两种情况,可以继续往下查找和不可以继续往下查找
    可以继续往下查找right:此位置1-9中有数可填
    不可以error:此位置1-9都不可以填,即1-9在此位置的行列方块有用过
  3. 代码
#include <stdio.h>

int ax[10][10], ay[10][10], az[10][10],x,y; // ax, ay, az[j][i] 分别记录第 j 行,第 j 列, 第 j 个方块中,数字 i 是否可用 
//从左到右,从上到下的顺序标记数独中的方块 , x y  表示测试到 ( x, y ) 
int xy1[10][10]; // xy1 记录 ( x, y )位置 是否可填数字, = 2 代表原始的数,不可变 ; = 1 代表需填数字 ; = 0 代表已填数字 
int xy2[10][10]; // 记录 ( x, y )位置 测试到哪个数字 
int form[10][10]; // 表格,记录 ( x, y )位置 属于哪个方块 
int i1; // ?? 
int xy[10][10]; // 记录当前状态下数独表中的数,开始为输入的数据, 结束为答案 
void doform(); // 制作方块表 
int cube(int, int); //查找在第几个方块, 多少有点多余 
void error(); // 当前位置发生错误(没有数字可填),如何返回 
void right(); // 当前位置正确如何继续

// 制作方块表
void doform() 
{
   
	int i,j; // 位置 ( i, j ) 
	int cnt; // 第几方块 
	cnt = 1;
	for( i = 1; i<10; i++ ){
   
		for( j = 1; j<10; j++ ){
   
			if( j == 4 || j == 7 )
			cnt++;
			form[i][j] = cnt;
		}
		cnt -= 2;
		if( i == 3 || i == 6 )
		cnt += 3;
	}
}

// 查询方块,多余的东西 
int cube(int x, int y)
{
   
	return form[x][y];
}

//正确情况 
void right()
{
   
	int i; //当前位置测试的数字 
	int z;  
	z = cube(x,y); // 
	i = xy2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值