提问者:小点点

将python转换为C++


我试图将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)编译过它,它可以生成板的第一行。


共1个答案

匿名用户

我认为有一些不同的API您可以选择将您的代码翻译成另一种语言。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(python|转|换为|c++)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?