我试图将Python程序转换为C++,因为我对Python的理解稍微好一点。然而,翻译出来的代码并不起作用。有人能帮我一下吗?我试图用C++制作一个数独板,但它在board
中返回一些值,而不是其他位置。加上它们是无效的,并包含0。
这个程序的输出是一个二维数组,所有值都不在0,并且对数独板有效:
import random
def coutb(board):
for i in range(9):
print(board[i])
def make_board(m=3):
n = m**2
board = [[None for k in range(n)] for k in range(n)]
board
是一个长度为9的二维数组,在每个位置都有9个列出的语句。在这里,它们都被初始化为none
。
def search(c=0):
"Recursively search for a solution starting at position c."
i, j = c//n, c%n
i0, j0 = i - i % m, j - j % m
numbers = list(range(1, n + 1))
random.shuffle(numbers)
for x in numbers:
if (x not in board[i]
and all(row[j] != x for row in board)
and all(x not in row[j0:j0+m] for row in board[i0:i])):
board[i][j] = x
if c + 1 >= n**2 or search(c + 1):
coutb(board)
print ('\n')
return board
else:
board[i][j] = None
return None
return search()
coutb(make_board())
这个程序的输出也是一个二维数组,但是里面的值并不是每次都valid
。因为在Python中,它总是一个有效的板。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int board[9][9];
void PrintBoard(){
for (int i=0; i<9; i++) {
for (int j=0;j<9;j++){
cout << board[i][j] << " ";
}
cout << endl;
}
}
这三个检查每个发现的数字的有效性水平,垂直和通过网格。
bool hor(int x,int target){
for (int i=0;i<9;i++){
if (board[x][i]== target)
return false;
}
return true;
}
bool ver(int y, int target){
for (int i=0;i<9;i++){
if (board[i][y]== target)
return false;
}
return true;
}
bool grid(int x, int y,int target){
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
if (board[x-x%3+i][y-y%3+j]==target)
return false;
}
}
return true;
}
我正在苦苦挣扎的地方是:
int search(int c){
int row = c/9, col= c%9;
int num[9] = {1,2,3,4,5,6,7,8,9};
srand(time(NULL));
for (int x=0;x<9;x++){
int temp = num[x];
int k = rand() % 9;
num[x] = num[k];
num[k] = temp;
}
for (int x=8;x>=0;x--){
if (hor(row,num[x]) && ver(col,num[x]) && grid(row,col,num[x]) )
return num[x];}
if (c+1>80 || search(c+1))
return 1;
else
return 0;
}
int make_board(int m){
int n = m*m;
return(search(n));
}
int main(){
for (int i=0;i<9;i++){
for (int j=0;j<9;j++){
board[i][j] = 0;
}
}
int c=80;
while (c>=0){
int i = c/9, j = c%9;
board[i][j] = search(c);
c--;
}
PrintBoard();
return 0;
}
在Python中,def函数不需要我们定义它的用法,但在C++中有。
我怀疑问题出在C++主函数make_board()
上,因为我以前在主函数while循环中用(I*3)
编译过它,它可以生成板的第一行。
我认为有一些不同的API您可以选择将您的代码翻译成另一种语言。