| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3981 人关注过本帖
标题:初学者问一个关于用 C 编写数独游戏的问题
只看楼主 加入收藏
入门者一个
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-9-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
初学者问一个关于用 C 编写数独游戏的问题
已经学了一点皮毛吧,最近有个任务是用C去写一个数独游戏,没有什么思路,希望大神们帮帮.....谢啦!
搜索更多相关主题的帖子: 游戏 
2014-09-04 10:01
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:0 
看到你的问题第一反应就是二维数组

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-09-04 12:03
入门者一个
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-9-4
收藏
得分:0 
回复 2 楼 funyh250
是要用到二维数组和一维数组,现在感觉是无从下手.....不好意思新手一枚,可以大体说说该用怎样的思路吗?
2014-09-04 12:44
funyh250
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:26
帖 子:290
专家分:1573
注 册:2013-12-25
收藏
得分:5 
按照游戏规则思路来写就行了,不懂得可以把代码贴出来帮你看看

学习是大事   吃喝拉撒睡是小事   其他的那都不是事
2014-09-04 13:05
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:10 
算法比较复杂 这里不适合谈论这个算法
简单说说吧

如果我们不谈论程序数据区的开销的话 :(最普遍能想到的 )
我们需要下面的函数
a[M][N]  保存数组 假设0表示未确定
b[M][N]  表示 b[i][j]表示a[i][j]位置上有几个可能的取值
int f1(int a[][N]);返回值表示a[i][j] 位置上有几个可能的取值,返回0表示已经确定该处的值   
int * f2(int a[][N]);返回长度为10的数组 指针 ,该数组表示a[i][j]位上所有可能的取值 返回全0 表示该位置确定
void f3(int a[][N],int b[][N]);里面调用f1()逐个计算b[i][j] 该函数主要用来计算当前的b[][];
void f4(int a[][N],int b[][N]);f4()运行之后 首先刷新生成一次 b[][];
                               里面递归f4(),终止条件是b[][] !=1 ;
                                       否则 全局扫描,如果b[][]==1那么求解 并且根据f3()重新计算b[][];
                               这里递归f4();
                               完成f4()之后保证没有一个地方的可能值只有一个。
void f5(int a[][N],int b[][N])就是重点的重点了 这里不做深入讨论,
                            f5()里面递归调用f5(),终止条件是b[][]全0;
                            f5()重点采用假设法,可以顺序假设 也可以按照b[][]从小到大 开始假设
                            假设之后要调用f4(),调用f4()后 根据b[][]决定是不是要递归调用f5();
                            如果遇到test()==1 就保存记录。如果test()==0 重新假设 并且消除之前被假设过的值
                           
                              
bool test(int a[][N]);  测试填好值的数独 是不是正确解  过程忽略。
2014-09-04 13:54
入门者一个
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-9-4
收藏
得分:0 
回复 5 楼 erty1001
首先要感谢你的帮助,但说实话看的不是很懂,不好意思,学的真的不是很好,我先考虑的是应该把数独的九宫图画出来,现在已经用TC画出九宫图,但发现了更多问题,如何在九宫图里生成数字和空白,坐标该如何把握0.0,再次感谢你的帮助,我会好好琢磨你的思路的。
2014-09-04 16:14
随风而行lulu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:60
注 册:2014-9-6
收藏
得分:0 
回复 5 楼 erty1001
a和b数组可以举例一下吗,有点抽象,谢谢。
2014-09-08 23:45
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:5 
简单说说:
不妨我们设有个简单的3维自定规则的数独L3:
简单数独由于是3维,所以不算对角线 也不算3*3的小九宫格
那么已知数据是1 2 3 中的一个 未至数据用0表示
原表:  1  0   0
        0  0   2
        0  0   0
a[3][3]= 1   0   0
         0   0   2
         0   0   0  
虚拟表格aa[3][3][""]=   0      "2 3 "     "3"
                       "3"     "1 3"       0
                       "2 3"   "1 2 3"    "1 3"
b[3][3]=  0   2  1
          1   2  0
          2   3  2
2014-09-09 07:21
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
简单说说:
不妨我们设有个简单的3维自定规则的数独L3:
简单数独由于是3维,所以不算对角线 也不算3*3的小九宫格
那么已知数据是1 2 3 中的一个 未至数据用0表示
原表:  1  0   0
        0  0   2
        0  0   0
a[3][3]= 1   0   0
         0   0   2
         0   0   0  
虚拟表格aa[3][3][""]=   0      "2 3 "     "3"
                       "3"     "1 3"       0
                       "2 3"   "1 2 3"    "1 3"
b[3][3]=  0   2  1
          1   2  0
          2   3  2
2014-09-09 07:21
入门者一个
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2014-9-4
收藏
得分:0 
回复 9 楼 erty1001
谢谢你的回复和建议
2014-09-09 14:57
快速回复:初学者问一个关于用 C 编写数独游戏的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080780 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved