数独程序

梦想与她 提交于 2020-01-10 13:25:21
#include <stdio.h>
#include <cstring>
using namespace std;
int vis[10][10][10] = {0};
int a[10][10];
int turn(int x)
{
    if(x%3==0) return x-2;
    if(x%3==1) return x;
    return x - 1;
}
void update(int x, int y, int val)
{
    for(int i = 1; i <= 9; i++)
        vis[x][i][val] = vis[i][y][val] = 1;

    x = turn(x); y = turn(y);

    for(int i = x; i <= x + 2; i++)
        for(int j = y; j <= y + 2; j++)
            vis[i][j][val] = 1;
}
int main()
{
    while(1)
    {
        memset(vis, 0, sizeof(vis));
        puts("game is on");
        for(int i = 1; i <= 9; i++)
            for(int j = 1; j <= 9; j++)
            {
                scanf("%d", &a[i][j]);
                if(a[i][j]) update(i, j, a[i][j]);
            }

        while(1)
        {
            int flag = 0;
            for(int i = 1; i <= 9; i++)
            {
                for(int j = 1; j <= 9; j++)
                {
                    int num = 0, id;
                    for(int k = 1; k <= 9; k++)
                    {
                        if(vis[i][j][k]) num++;
                        else id = k;
                    }
                    if(num==8 && a[i][j]==0)
                    {
                        flag = 1;
                        a[i][j] = id;
                        update(i, j, id);
                        break;
                    }
                }
                if(flag) break;
            }

            if(!flag) break;
        }
        puts("-----------------ANS-------------------");

        for(int i = 1; i <= 9; i++)
            for(int j = 1; j <= 9; j++)
                printf("%d%c", a[i][j], j==9?'\n':' ');

        puts("next game");

    }
}

 

  借助计算机的快速计算能力,来完成简单的数独游戏,但是逻辑关系太简单了,复杂数独还是出不来的。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!