我在java中的Sudoku Solver中有错误 [英] I have error in Sudoku Solver in java
本文介绍了我在java中的Sudoku Solver中有错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
嗨专家。晚安。
我在c中有数独求解器。它运作正常。我只是改成了java编码。但它没有用。它返回一些错误。我对Java有点了解。 Plz帮帮我。
C编码:
Hi experts. Good Evening.
I have sudoku solver in c. It is working properly. I just change into java coding. But it is not working. It return some error. I know little bit of java. Plz Help me.
C Coding :
#include <stdio.h>
int grid[9][9];
void print_solution(void)
{
static int nsol = 0;
int r, c;
printf("----- solution %d -----\n", ++nsol);
for (r = 0; r < 9; r++)
{
for (c = 0; c < 9; c++)
{
printf("%d", grid[r][c]);
if (c % 3 == 2) printf(" ");
}
printf("\n");
if (r % 3 == 2) printf("\n");
}
}
int safe(int row, int col, int n)
{
int r, c, br, bc;
if (grid[row][col] == n) return 1;
if (grid[row][col] != 0) return 0;
for (c = 0; c < 9; c++)
if (grid[row][c] == n) return 0;
for (r = 0; r < 9; r++)
if (grid[r][col] == n) return 0;
br = row / 3;
bc = col / 3;
for (r = br * 3; r < (br + 1) * 3; r++)
for (c = bc * 3; c < (bc + 1) * 3; c++)
if (grid[r][c] == n) return 0;
return 1;
}
void solve(int row, int col)
{
int n, t;
if (row == 9)
print_solution();
else
for (n = 1; n <= 9; n++)
if (safe(row, col, n)) {
t = grid[row][col];
grid[row][col] = n;
if (col == 8)
solve(row + 1, 0);
else
solve(row, col + 1);
grid[row][col] = t;
}
}
int
main()
{
int i, j;
printf("enter the sudoku: \n");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
printf("(%d, %d): ", i+1, j+1);
scanf("%d", &grid[i][j]);
}
solve(0,0);
return 0;
}
我只是对java编码做了一些修改。
Java编码:
I just do some changes in java coding.
Java coding:
import java.util.*;
import java.io.*;
class puzzle
{
public static void main(String[] args)
{
int[][] grid = new int[9][9];
int i, j;
Scanner in = new Scanner(System.in);
System.out.println("Enter the Values :");
for(i=0;i<9;i++)
for(j=0;j<9;j++)
{
System.out.print(i+1+","+ j+1);
grid[i][j]=in.nextInt();
}
solve(0,0);
return 0;
}
void print_solution()
{
static int nsol = 0;
int r, c;
System.out.println("----- solution"+ ++nsol + " -----\n");
for (r = 0; r < 9; r++)
{
for (c = 0; c < 9; c++)
{
System.out.print(grid[r][c]);
if (c % 3 == 2)
System.out.print(" ");
}
System.out.println();
if (r % 3 == 2)
System.out.println();
}
}
int safe(int row, int col, int n)
{
int r, c, br, bc;
if (grid[row][col] == n)
return 1;
if (grid[row][col] != 0)
return 0;
for (c = 0; c < 9; c++)
if (grid[row][c] == n)
return 0;
for (r = 0; r < 9; r++)
if (grid[r][col] == n)
return 0;
br = row / 3;
bc = col / 3;
for (r = br * 3; r < (br + 1) * 3; r++)
for (c = bc * 3; c < (bc + 1) * 3; c++)
if (grid[r][c] == n) return 0;
return 1;
}
void solve(int row, int col)
{
int n, t;
if (row == 9)
print_solution();
else
for (n = 1; n <= 9; n++)
if (safe(row, col, n)) {
t = grid[row][col];
grid[row][col] = n;
if (col == 8)
solve(row + 1, 0);
else
solve(row, col + 1);
grid[row][col] = t;
}
}
}
请帮我看看发生了什么错误?
Please help me what error is happening?
推荐答案
Java中不允许使用静态局部变量。即使它们是 - 什么会让你认为nsol
需要是静态的?只需删除此关键字。并使用常规手册之一倾斜一些Java。不要混淆,例如,C ++。
-SA
Static local variables are not allowed in Java. Even if they were — what would make you think thatnsol
needs to be static? Just remove this keyword. And lean some Java, using one of regular manuals. Don't mix it up with, for example, C++.
—SA
这篇关于我在java中的Sudoku Solver中有错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文