java 编写16*16数独 但是怎么让数独里的数字变成颜色 就是本来里面填充的是数字 现在变成16种不同颜色.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 编写16*16数独 但是怎么让数独里的数字变成颜色 就是本来里面填充的是数字 现在变成16种不同颜色.相关的知识,希望对你有一定的参考价值。

就是让java求这个图的答案的时候 由填充数字变成填充颜色. 当然 原来填在里面的 也要变成相应的颜色

参考技术A 算法和原来一样吧,只是每一个数字都代表一个颜色,先把数字填好,然后在根据数字把界面中的方格变成颜色,比如1对应红色,2对应黄色,3对应绿色等等追问

没 教授要求 在算的时候就是用颜色的...就是看到颜色一直在变的那种

追答

说实话数独这个我没写过。不过我的理解还是算法不变,你可以把数字替代成颜色的代码,比如像html里面的用16进制数表示颜色,或者像ps中那种RGB的写法。
这个无论是数字还是颜色,其实原理都是一样的,满足每一行、每一列、每一个粗线宫内的元素均含1-16个数字或颜色,不重复

追问

那我把我写的code给你看看行么 然后你帮我看看 怎么改. 就是不知道怎么从1的方块 改成颜色的

追答

扣扣541757181

c++验证数独问题,求代码

定义一个数独类Sudoku,定义成员数据mySudoku将题目所给的9*9的数列输入到数独类中,并编写成员函数checkAnswer()验证它是否是一个成功的数独!
第一行是一个整数T,代表接下来有T组输入;
每一组输入有9行,每一行9个数字,数字都是1~9的合法正整数数字
对于每一组数据,如果这是一个成功的数独,输出“Yeah!”(不包含双引号)和一个换行符。
否则输出“Oh,No!”(不包含双引号)和一个换行符。
例如输入:
2
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
2 3 4 5 6 7 8 9 1
5 6 7 8 9 1 2 3 4
8 9 1 2 3 4 5 6 7
3 4 5 6 7 8 9 1 2
6 7 8 9 1 2 3 4 5
9 1 2 3 4 5 6 7 8

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
输出:
Yeah!
Oh,No!
不是类也可以,能够验证数独就行

把上述的数据存入文件,运行时从文件中读取:
#include<stdio.h>
#include<string.h>
int a[9][9];
int checkAnswer()
int i,j,s,b[10],i1,j1;
 for(i=0;i<9;i++)
 memset(b,0,sizeof(b));
  for(j=0;j<9;j++)
    b[a[i][j]]=1;
  for(j=s=0;j<10;j++)
    s+=b[j];
  if(s-9)return 0;   
 
 for(i=0;i<9;i++)
 memset(b,0,sizeof(b));
  for(j=0;j<9;j++)
    b[a[j][i]]=1;
  for(j=s=0;j<10;j++)
    s+=b[j];
  if(s-9)return 0;   
 
 for(i=0;i<9;i+=3)
   for(j=0;j<9;j+=3)
   memset(b,0,sizeof(b));
    for(i1=0;i1<3;i1++)
      for(j1=0;j1<3;j1++)
         b[a[i+i1][j+j1]]=1;
    for(j1=s=0;j1<10;j1++)
      s+=b[j1];
    if(s-9)return 0;   
   
 return 1;  

int main()
int t,i,j;
 FILE *fp;
 if((fp=fopen("d:\\\\0.txt","r"))==NULL)
 printf("File open error!\\n");
  return 0;
 
 fscanf(fp,"%d",&t);
 while(t--)
 for(i=0;i<9;i++)
    for(j=0;j<9;j++)
      fscanf(fp,"%d",&a[i][j]);
  printf("%s\\n",checkAnswer()?"Yeah!":"Oh,No!");
 
 fclose(fp);
 return 0;

参考技术A #include <iostream>
using namespace std;
class Sudoku
    int num[9][9];
public:
    Sudoku()
    void in();
    bool checkAnswer();
;
void Sudoku::in()
    for(int i=0;i<9;i++)
        for(int j=0;j<9;j++)
            cin>>num[i][j];

bool judge(int a[])
    int i,j,k,t;
    for(i=0;i<8;i++)
        k=i;
        for(j=i+1;j<9;j++)
            if (a[j]<a[k])
                k=j;
        if (i!=k)
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        
    
    for(i=0;i<9;i++)
        if (a[i]!=i+1)
            return true;
    return false;

bool Sudoku::checkAnswer()
    int a[9];
    int i,j,k;
    for(i=0;i<9;i++)
        for(j=0;j<9;j++)
            a[j]=num[i][j];
        if (judge(a)) return false;
        for(j=0;j<9;j++)
            a[j]=num[j][i];
        if (judge(a)) return false;
        if (i%3==0)
            j=0;
            for(k=0;k<3;k++)
                a[j++]=num[i+k][0];
                a[j++]=num[i+k][1];
                a[j++]=num[i+k][2];
            
            if (judge(a)) return false;
            j=0;
            for(k=0;k<3;k++)
                a[j++]=num[i+k][3];
                a[j++]=num[i+k][4];
                a[j++]=num[i+k][5];
            
            if (judge(a)) return false;
            j=0;
            for(k=0;k<3;k++)
                a[j++]=num[i+k][6];
                a[j++]=num[i+k][7];
                a[j++]=num[i+k][8];
            
            if (judge(a)) return false;
        
    
    return true;

int main()
    int n;
    Sudoku A;
    cin>>n;
    while (n--)
        A.in();
        if (A.checkAnswer())
            cout<<"Yeah!"<<endl;
        else cout<<"Oh,No!"<<endl;
    
    return 0;

本回答被提问者采纳

以上是关于java 编写16*16数独 但是怎么让数独里的数字变成颜色 就是本来里面填充的是数字 现在变成16种不同颜色.的主要内容,如果未能解决你的问题,请参考以下文章

Java中的数独求解器,使用回溯和递归

LeetCode题目--有效的数独(python/Java实现)

数独回溯 无效数独

c++验证数独问题,求代码

高效算法求解数独

力扣算法初级——有效的数独