我从网上下载了这个数独求解器。
我正在尝试在Eclipse中运行该程序。但我不确定如何提供输入。
由于我是Java和Eclipse的新手,我不知道该怎么做。
请帮助。
以下是代码:
public class Sudoku {
public static void main(String[] args) {
//Load the matrix
int[][] matrix = parseProblem(args);
writeMatrix(matrix);
//Find a solution
if (solve(0, 0, matrix))
writeMatrix(matrix);
else
System.out.println("NONE");
}
static boolean solve(int i, int j, int[][] cells) {
if (i == 9) {
i = 0;
if (++j == 9) {
return true;
}
}
if (cells[i][j] != 0) {
return solve(i + 1, j, cells);
}
for (int val = 1; val <= 9; ++val) {
if (legal(i, j, val, cells)) {
cells[i][j] = val;
if (solve(i + 1, j, cells)) {
return true;
}
}
}
//Reset
cells[i][j] = 0;
return false;
}
static boolean legal(int i, int j, int val, int[][] cells) {
//Row
for (int k = 0; k < 9; ++k) {
if (val == cells[k][j]) {
return false;
}
}
//Column
for (int k = 0; k < 9; ++k) {
if (val == cells[i][k]) {
return false;
}
}
int boxRowOffset = (i / 3) * 3;
int boxColOffset = (j / 3) * 3;
for (int k = 0; k < 3; ++k) {
for (int m = 0; m < 3; ++m) {
if (val == cells[boxRowOffset + k][boxColOffset + m]) {
return false;
}
}
}
return true;
}
static int[][] parseProblem(String[] args) {
int[][] problem = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
problem[i][j] = Integer.parseInt(args[i].substring(j, j+1));
}
}
return problem;
}
static void writeMatrix(int[][] solution) {
for (int i = 0; i < 9; ++i) {
if (i % 3 == 0) {
System.out.println(" -----------------------");
}
for (int j = 0; j < 9; ++j) {
if (j % 3 == 0) {
System.out.print("| ");
}
System.out.print(solution[i][j] == 0 ? " " : Integer.toString(solution[i][j]));
System.out.print(' ');
}
System.out.println("|");
}
System.out.println(" -----------------------");
}
}
答案 0 :(得分:3)
在parseProblem()
方法中,您尝试从命令行参数中读取。
要提供命令行参数,请执行以下步骤:
右键单击该课程。选择运行方式 - &gt;运行配置......
双击左侧面板上的 Java Application 。
转到右侧面板上的(x)=参数标签。
在程序参数字段下,提供程序输入。
在您的情况下,输入参数应类似于:
030400000
870306001
004980000
906034000
005000300
000750204
000043700
500608032
000002080
根据您下载的代码,&#34; 0&#34; 代表空白值。
答案 1 :(得分:1)
此程序基于运行程序时给出的args [],因此如果您希望它运行,您需要转到cmd,转到您的类所在的地图并键入:
示例:java数独091254876985235646586546545645646545645464435435484843521231564545648545643213541564654545313213541354384584514231354854668543215153144544384384354542135453454354451351351315584648648468(您必须提供81个参数,因为您的数独包含9 * 9位数)