| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1043 人关注过本帖
标题:输出数独表的C语言程序代码
只看楼主 加入收藏
cracker134
Rank: 2
等 级:等待验证会员
帖 子:18
专家分:13
注 册:2010-6-15
收藏
 问题点数:0 回复次数:1 
输出数独表的C语言程序代码
程序代码:
#include<stdio.h>

int num[9][9],num_n=0,total=0;    //num为储存九宫数独表的2维数组,num_n代表第几组数独表,total为总的组数

void sortnum(int sort_n);
void generatenum(int *pctr,int sort_n,int at);
int test_1(int *pctr,int ctr_n);
int test_2(int a,int b);
void printnum();

int main()
{
    printf("本程序可列出九宫数独表的所有可能。(cracker134制作)\n按下Enter开始逐份输出数独表:");

    sortnum(0);

    printf("total=%i\n",total);

    return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////
void sortnum(int sort_n)    //九格中每个格中九个数字的产生
{
    int ctr[9];

    generatenum(ctr,sort_n,0);
}

///////////////////////////////////////////////////////////////////////////////////////////
void generatenum(int *pctr,int sort_n,int at)    //九格中每个格中各个位置数字的产生
{   
    for(*(pctr+at)=1;*(pctr+at)<10;(*(pctr+at))++)
    {
        num[(sort_n%3)*3+at%3][sort_n/3*3+at/3]=*(pctr+at);    //把产生的数字在排列在格内,方便检验

        if((test_1(pctr,at)==0)||(test_2((sort_n%3)*3+at%3,sort_n/3*3+at/3)==0))    //检验产生的数字是否符合要求
        {continue;}
      
        if(at!=8)
        {
            generatenum(pctr,sort_n,at+1);
        }
   
        if((at==8)&&(sort_n!=8))
        {   
            sortnum(sort_n+1);
        }

        if((at==8)&&(sort_n==8))
        {
            getchar();
            printnum();
        }
    }
}

///////////////////////////////////////////////////////////////////////////////////////////
int test_1(int *pctr,int ctr_n)    //检测每格中是否存在相同数
{
    int i,res=1;

    for(i=0;i<ctr_n;i++)
    {
        if(*(pctr+ctr_n)==*(pctr+i)){res=0;}
    }

    return res;
}
///////////////////////////////////////////////////////////////////////////////////////////
int test_2(int a,int b)    //检测每行每列是否存在相同数
{
    int x,y,res=1;    

    if(a>2)
    {
        for(x=0;x<(a/3*3);x++)
        {
            if(num[x][b]==num[a][b]) {res=0;}
        }
    }
   
    if(res==1)
    {
        if(b>2)
        {
            for(y=0;y<(b/3*3);y++)
            {
            if(num[a][y]==num[a][b]) {res=0;}
            }
        }
    }

    return res;
}

///////////////////////////////////////////////////////////////////////////////////////////
void printnum()    //列出数独表
{
    int x,y;

    num_n++;
    printf("第%i组:\n",num_n);

    for(y=0;y<9;y++)
    {
        for(x=0;x<9;x++)
        {
            printf("%i ",num[x][y]);

            if((x==2)||(x==5)){printf(" ");}
        }

        printf("\n");

        if((y==2)||(y==5)){printf("\n");}
    }
    printf("\n\n\n");
}
搜索更多相关主题的帖子: C语言 代码 输出 
2010-06-18 16:23
zhonganshuai
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2010-5-30
收藏
得分:0 
  帅哥  加我QQ 747169987  谢了
2010-06-18 16:38
快速回复:输出数独表的C语言程序代码
数据加载中...
 
   



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

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