姑苏问 2017-03-28 14:01 采纳率: 0%
浏览 952

c 转 python 函数调用失败

这个是原版的c

int size_of_largest_parallelogram(void) {
    int max_size = 0, size;
    for (int i = 0; i < DIM - 1; ++i)
        for (int j1 = 0; j1 < DIM - 1; ++j1) {
            if (!grid[i][j1])
                continue;
            for (int j2 = j1 + 1; j2 < DIM; ++j2) {
                if (!grid[i][j2])
                    break;
                size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, STRAIGHT);
                if (size > max_size)
                    max_size = size;
                size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, LEFT);
                if (size > max_size)
                    max_size = size;
                size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, RIGHT);
                if (size > max_size)
                    max_size = size;
            }
        }
    return max_size;
}

int size_of_largest_parallelogram_with_given_top_side(int i1, int j1, int j2, int dir) {
    int length = j2 - j1 + 1;
    int i2 = i1;
    bool good_so_far = true;
    if (dir == STRAIGHT) {
        while (good_so_far && ++i2 < DIM)
            for (int j = j1; j <= j2; ++j)
                if (!grid[i2][j]) {
                    good_so_far = false;
                    break;
                }
    }
    else if (dir == LEFT) {
        while (good_so_far && ++i2 < DIM && --j1 >= 0) {
            --j2;
            for (int j = j1; j <= j2; ++j)
                if (!grid[i2][j]) {
                    good_so_far = false;
                    break;
                }
        }
    }
    else if (dir == RIGHT) {
        while (good_so_far && ++i2 < DIM && ++j2 < DIM) {
            ++j1;
            for (int j = j1; j <= j2; ++j)
                if (!grid[i2][j]) {
                    good_so_far = false;
                    break;
                }
        }
    }
    if (i2 == i1 + 1)
        return 0;
    return (i2 - i1) * length;
}        



这涉及grid 里面只有 0 1 两种元素

这个是我写的python 第一个函数从 if grid1[i][j1] ==0: 后面开始就没有执行了,不知该怎么改写,还望大家帮忙,谢谢!

 def size_of_largest_parallelogram():
    max_size = 0

    for i in range( 0,  dim - 1) :
        for j1 in range(0,  dim-1) :

            if grid1[i][j1] ==0:
                continue

                for j2 in range ( j1 + 1, dim):
                        if grid1[i][j2] == 0:
                            break
                        size = size_of_largest_parallelogram_1(i,j1, j2, straight)
                        if size > max_size:
                            max_size = size
                        size = size_of_largest_parallelogram_1(i,j1, j2, left)
                        if size > max_size:
                            max_size = size
                        size = size_of_largest_parallelogram_1(i,j1, j2, right)
                        if size > max_size:
                            max_size = size
    return max_size


def size_of_largest_parallelogram_1( i1, j1, j2, d ):
    length = j2 -j1 + 1
    i2 = i1
    good_state = 1;
    if d == straight :
        while good_state and ++i2 < dim:
            for j in range (j1 , j2+1):
                if grid1[i2][j] == 0:
                    good_state = 0
                    break
    elif d == left:
        while good_state and ++i2 < dim and --j1 >=0:
            --j2
            for j in range (j1, j2+1):
                if grid1[i2][j] == 0:
                    good_state = 0
                    break

    elif d == right:
        while good_sate and ++i2 < dim and ++j2 < dim:
            ++j1
            for j in range (j1, j2+1):
                if grid1[i2][j] == 0:
                    good_state = 0
                    break
    if i2 == i1 + 1:
        return 0

    return (i2 - i1) * length





  • 写回答

1条回答 默认 最新

  • devmiao 2017-03-28 15:42
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码