当前位置: 首页 > 知识库问答 >
问题:

将python转换为C++

鲁景山
2023-03-14

我试图将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个答案

司马腾
2023-03-14

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

 类似资料:
  • 问题内容: 我在使用Python将XML文件转换为CSV时遇到很多麻烦。我看过很多论坛,都尝试过lxml和xmlutils.xml2csv,但是我无法使其正常工作。这是来自Garmin GPS设备的GPS数据。 这是我的XML文件的样子,当然是缩短了: 我的大型XML文件中有几个trk标记,但我可以设法将它们分开-它们代表GPS设备上的不同“段”或行程。我想要的只是一个CSV文件,它绘制了以下内容

  • 我正在尝试将curl中的以下工作请求转换为python请求(使用请求http://docs.python-requests.org/en/v0.10.7/). (请注意,我使用了一个假url,但该命令确实适用于真实url) 接收端(在烧瓶中运行)执行以下操作: 在curl(7.30)中,在Mac OS X(10.9)上运行,上面的命令正确返回使用标记查询过滤的json列表。 我的python脚本如

  • 问题内容: 我如何转换defaultdict 成为普通命令? 问题答案: 您可以简单地致电: 但请记住,defaultdict 是 一个dict: 只是稍有不同的行为,因为当您试图访问一个缺少关键-这通常会提高一个-在被称为改为: 这就是您在字典的数据端出现之前看到的内容。 因此,在不实际制作新对象的情况下恢复更多类似dict的行为的另一个技巧是重置: 但这在大多数情况下都不值得。

  • 我一直在我的开发服务器中使用模块来轻松地从转换为: 但是,我在生产服务器中部署了我的应用程序,但我没有安装Excel应用程序,因此引发了以下错误: 在Python中,从转换为有什么好的替代方法吗? 我已经用PDFWriter测试了xtopdf,但是使用这个解决方案,您需要逐个读取和迭代范围并写入行。我想知道是否有一个更直接的解决方案类似于win32com。客户 谢谢

  • 我正在制作一个奥赛罗播放器,实现了一个带有alpha-beta剪枝的极大极小算法。然后,我在网上对最好的算法做了一些研究,并不断听到他们都使用的“negamax”算法。好像大部分人都觉得negamax比minimax快(我觉得是因为它不在min和max播放器之间切换?),所以我想把我的minimax算法变成negamax,如果那不是太难的话。 我想知道人们是否有任何洞察力,有多少更快地使用Niga

  • 问题内容: 我有一个时间序列。我提取了索引,并希望将它们分别转换为。您如何去做?我尝试使用,但使用后检查时无法转换 问题答案: 只需尝试to_datetime() 更改类型 更新 谢谢@mjp,以后会弃用,请改用!