Java基于二维数组实现的数独问题示例

本文实例讲述了Java基于二维数组实现的数独问题。分享给大家供大家参考,具体如下:

这里利用Java二维数组实现数独问题。

(1)生成简易数独
(2)生成数独问题**

代码

import java.util.Random;
import java.util.ArrayList;
public class Suduku {
  /**
   *打印二维数组,数独矩阵
   */
  public static void printArray(int a[][])
  {
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        System.out.print(" "+a[i][j]);
        if (0==((j+1)%3)) {
          System.out.print(" ");
        }
      }
      System.out.println();
      if(0==((i+1)%3))
      {
        System.out.println();
      }
    }
  }
  /**
   * 产生一个1-9的不重复长度为9的一维数组
   */
  public static ArrayList<Integer> creatNineRondomArray()
  {
    ArrayList <Integer>list = new ArrayList<Integer>();
    Random random=new Random();
    for (int i = 0; i < 9; i++) {
      int randomNum=random.nextInt(9)+1;
      while (true) {
        if (!list.contains(randomNum)) {
          list.add(randomNum);
          break;
        }
        randomNum=random.nextInt(9)+1;
      }
    }
    System.out.println("生成的一位数组为:");
    for (Integer integer : list) {
      System.out.print(" "+integer.toString());
    }
    System.out.println();
    return list;
  }
  /**
   *通过一维数组和原数组生成随机的数独矩阵
   *
   *遍历二维数组里的数据,在一维数组找到当前值的位置,并把一维数组
   *当前位置加一处位置的值赋到当前二维数组中。目的就是将一维数组为
   *依据,按照随机产生的顺序,将这个9个数据进行循环交换,生成一个随
   *机的数独矩阵。
   *
   */
  public static void creatSudokuArray(int[][]seedArray,ArrayList<Integer> randomList)
  {
    for (int i = 0; i < 9; i++) {
      for (int j = 0; j < 9; j++) {
        for (int k = 0; k < 9; k++) {
          if(seedArray[i][j]==randomList.get(k))
          {
            seedArray[i][j]=randomList.get((k+1)%9);
            break;
          }
        }
      }
    }
    System.out.println("处理后的数组");
    Suduku.printArray(seedArray);
  }
  public static void creatSudokuQuestion(int [][] a)
  {
    Random rand=new Random();
    for(int i=0;i<9;i++){
      for(int j=0;j<4;j++){
      a[i][(int)rand.nextInt(9)]=0;
      }
    }
    Suduku.printArray(a);
  }
  //
  public static void main(String[] args) {
    int seedArray[][]={
        {9,7,8,3,1,2,6,4,5},
        {3,1,2,6,4,5,9,7,8},
        {6,4,5,9,7,8,3,1,2},
        {7,8,9,1,2,3,4,5,6},
        {1,2,3,4,5,6,7,8,9},
        {4,5,6,7,8,9,1,2,3},
        {8,9,7,2,3,1,5,6,4},
        {2,3,1,5,6,4,8,9,7},
        {5,6,4,8,9,7,2,3,1}
    };
    System.out.println("原始的二维数组:");
    Suduku.printArray(seedArray);
    ArrayList<Integer> randomList=Suduku.creatNineRondomArray();
    Suduku.creatSudokuArray(seedArray, randomList);
    System.out.println("生成数独问题:");
    Suduku.creatSudokuQuestion(seedArray);
  }
}

输出:

原始的二维数组:
 9 7 8 3 1 2 6 4 5
 3 1 2 6 4 5 9 7 8
 6 4 5 9 7 8 3 1 2 

 7 8 9 1 2 3 4 5 6
 1 2 3 4 5 6 7 8 9
 4 5 6 7 8 9 1 2 3 

 8 9 7 2 3 1 5 6 4
 2 3 1 5 6 4 8 9 7
 5 6 4 8 9 7 2 3 1 

生成的一位数组为:
 2 3 9 1 6 8 7 5 4
处理后的数组
 1 5 7 9 6 3 8 2 4
 9 6 3 8 2 4 1 5 7
 8 2 4 1 5 7 9 6 3 

 5 7 1 6 3 9 2 4 8
 6 3 9 2 4 8 5 7 1
 2 4 8 5 7 1 6 3 9 

 7 1 5 3 9 6 4 8 2
 3 9 6 4 8 2 7 1 5
 4 8 2 7 1 5 3 9 6 

生成数独问题:
 0 5 7 9 6 3 0 0 0
 9 6 3 0 0 0 0 5 7
 0 2 4 1 0 7 9 6 0 

 5 0 1 6 0 9 2 0 0
 6 0 9 2 0 0 5 7 0
 2 0 8 0 7 1 0 3 9 

 7 1 5 0 0 6 4 8 2
 3 0 6 4 8 2 7 0 5
 4 8 2 7 0 0 3 9 6 

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • java使用回溯法求解数独示例

    复制代码 代码如下: import java.util.Calendar;import java.util.Date; public class Matrix { private int matrix[][]; private long timeAfter=0;  private long timeBefore =0; public Matrix(int m[][]) {  matrix = new int[9][9];  for (int i=0; i<9 ; i++)   for(int j

  • 简单实现java数独游戏

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来有些不足但毕竟是第一个程序,就直接放上来,数独终盘的实现直接用了暴力,时间复杂度有点高,懒得改了直接放代码 终盘实现: import java.util.Random; public class SudokuPuzzleGenerator { pri

  • java数独游戏完整版分享

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 自己写的数独游戏,共9关,代码如下: 1.DoShudu类用于产生数独数组 import java.util.Random; public class DoShudu { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int[][] cells=newshudu(); //ce

  • java回溯算法解数独问题

    本文实例为大家分享了java回溯算法解数独问题,供大家参考,具体内容如下 下面来详细讲一下如何用回溯算法来解数独问题. 下图是一个数独题,也是号称世界上最难的数独.当然了,对于计算机程序来说,只要算法是对的,难不难就不知道了,反正计算机又不累.回溯算法基本上就是穷举,解这种数独类的问题逻辑比较简单. 不管算法懂不懂,先把类建出来,变量定义好,那放大学试卷上就是可以拿两分了. package shudu; /** * Created by wolf on 2016/3/17. */ public

  • java版数独游戏界面实现(二)

    本文实例为大家分享了java版数独游戏界面实现的具体代码,供大家参考,具体内容如下 实现效果图: 这里写图片描述 主函数用于启动程序: package hlc.shudu.app; import hlc.shudu.src.ShuduHelper; import hlc.shudu.ui.ShuduMainFrame; public class AppStart { public static void main(String[] args) { ShuduMainFrame mainFrame

  • Java实现解数独的小程序

    前言 数独相信很多人都玩过,趣味性很强,十分的耐玩.可有没有程序员想过玩实现一个数独布局的算法呢?算法是个很有意思,很神奇的东西. 算法如下,需要预先给出几个固定的值,目前解决的一个最难的数独是大概26个已知值的情况,理论上应该能解决任意已知值的数独,不过不知道会不会迭代栈溢出--因为在26个已知值的情况下就迭代了3000多次了,囧~~~ 结果显示如下: 这是已知值: 1 1 2 1 4 8 1 5 5 1 6 1 1 7 7 1 8 3 2 1 1 2 2 6 2 4 4 3 5 9 3 7

  • java版数独游戏核心算法(一)

    之前学习javascript时用javascript写过一个数独游戏,最近看了一点java的内容,于是就心血来潮想搞一个java版的数独游戏. 现在将全部代码分享出来和大家学习交流,当然代码中有着各种各样的问题和不足之处,望各位朋友批评指点. 以下是生成数独地图的核心算法,算法不是很好,也是之前参考过网上的一些思想: package hlc.shudu.src; /* * 数独的帮助类,里面提供数据所需的所有算法 */ public class ShuduHelper { //数独地图数组 pr

  • python实现数独游戏 java简单实现数独游戏

    使用python和java实现数独游戏,有比较才有收获哦. 1.Python版 #--coding:utf-8-- import random import itertools from copy import deepcopy def make_board(m=3): numbers = list(range(1,m**2+1)) #可能出现的数字为1-9 board = None #board是数度二维列表 while board is None: board = get_board(m,n

  • Java基于二维数组实现的数独问题示例

    本文实例讲述了Java基于二维数组实现的数独问题.分享给大家供大家参考,具体如下: 这里利用Java二维数组实现数独问题. (1)生成简易数独 (2)生成数独问题** 代码 import java.util.Random; import java.util.ArrayList; public class Suduku { /** *打印二维数组,数独矩阵 */ public static void printArray(int a[][]) { for (int i = 0; i < 9; i+

  • java实现二维数组转json的方法示例

    本文实例讲述了java实现二维数组转json的方法.分享给大家供大家参考,具体如下: package Tsets; public class erweiTojson { public static void main(String[] args) { String[][] blogList = { {"2008/07/07", "NetBeans New and Cool", "Tim Boudreau"}, {"2008/07/07&

  • java 求解二维数组列最小值

    java 求解二维数组列最小值 比较二维数组列最小值,组成一个新数组返回. 实现核心算法,不需要使用IO 输入:{{5,6,1,16},{7,3,9}} 输出:{1,3} import java.util.Arrays; public class Col { public static int[] getColMin(int a[][]) { int[] res = new int[a.length]; for (int i = 0; i < a.length; i++) { int[] s =

  • java实现二维数组转置的方法示例

    本文实例讲述了java实现二维数组转置的方法.分享给大家供大家参考,具体如下: 这里在文件中创建Test2.Exchange.Out三个类 在Exchange类中编写exchange()方法,在方法中创建两个数组arraryA.arraryB,arraryB[j][i]=arraryA[i][j]实现数组的转置. 在Out类中编写out()方法,在方法中用for循环遍历实现输出. 具体代码如下: package Tsets; import java.util.*; public class Te

  • java定义二维数组的几种写法(小结)

    如下所示: //定义二维数组写法1 class numthree { public static void main(String[] args) { float[][] numthree; //定义一个float类型的2维数组 numthree=new float[5][5]; //为它分配5行5列的空间大小 numthree[0][0]=1.1f; //通过下标索引去访问 1行1列=1.1 numthree[1][0]=1.2f; // 2行1列=1.2 numthree[2][0]=1.3

  • java旋转二维数组实例

    本文实例讲述了java旋转二维数组的操作,分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package test; /*  *     1    2    3    4    5     *    16    17    18    19    6     *    15    24    25    20    7     *    14    23    22    21    8     *    13    12    11    10    9  *  *    写一

  • Java实现二维数组和稀疏数组之间的转换

    前言 用Java实现二维数据和稀疏数组之间的转换 1. 需求和思路分析 1.1 以二维数组的格式模拟棋盘.地图等类似的二维结构为基础,与稀疏数组之间进行转化. 1.2 思路分析 二维数组转化为稀疏数组 遍历原始的二维数组,得到有效数据个数 sum 根据sum就可以创建稀疏数组sparseArr int[sunm+1][3] 将二维数组的有效数据存入到稀疏数组 稀疏数组转为二维数组 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 再读取稀疏数组后几行的数据,并赋给原始的二维数组即可.

  • 利用numpy实现一、二维数组的拼接简单代码示例

    一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape 输出的值应该为(3,) 二维数组 2.numpy初始化二维数组 a = np.array([[1,2,3]]); b = np.array([[1],[2],[3]]); print a.shape//(1,3) print b.shape//(3,1) 注意(3,)和(3,1)的数组是不一样的,前者是一维数组,后者是二维数组. 拼接 3.numpy有很多的拼接函数.比如hstack

  • PHP简单实现二维数组赋值与遍历功能示例

    本文实例讲述了PHP简单实现二维数组赋值与遍历功能.分享给大家供大家参考,具体如下: 示例1: <?php $loptop1['lid'] = 1000; $loptop1['pic'] = 'img/1.png'; $loptop1['title'] = 'L1'; $loptop1['price'] = 5000; $loptop1['isOnSale'] = 1; $loptop1['shelfTime'] = 1234556; $loptop2['lid'] = 1001; $lopto

  • C++二维数组中的查找算法示例

    本文实例讲述了C++二维数组中的查找算法.分享给大家供大家参考,具体如下: 一.问题: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.实现代码: #include <iostream> #include <vector> using namespace std; bool Find(int target, vector<vector<int>

随机推荐