求把一段c++代码转为python

laotizi 2017-12-28 08:57:03
#include <iostream>
#include <cstring>
#define maxn 105
using namespace std;
int r, c, grid[maxn][maxn];
int rmax[maxn], cmax[maxn];
struct
{
int to, next;
} edges[maxn * maxn];
int head[maxn * 2];
void addedge(int u, int v)
{
static int ecnt = 1;
edges[ecnt].to = v;
edges[ecnt].next = head[u];
head[u] = ecnt++;
}
bool vis[maxn * 2];
int mat[maxn * 2];
bool dfs(int v)
{
for (int i = head[v]; i; i = edges[i].next)
{
int w = edges[i].to;
if (!vis[w])
{
vis[w] = true;
if (!mat[w] || dfs(mat[w]))
{
mat[w] = v;
mat[v] = w;
return true;
}
}
}
return false;
}
void hungary()
{
for (int i = 1; i <= r; i++)
{
if (!mat[i])
{
memset(vis, false, sizeof(vis));
dfs(i);
}
}
}

int main()
{
ios::sync_with_stdio(false);
unsigned long long ans = 0;
cin >> r >> c;
for (int i = 1; i <= r; i++)
{
for (int j = 1; j <= c; j++)
{
cin >> grid[i][j];
if (grid[i][j])
{
rmax[i] = max(rmax[i], grid[i][j]);
cmax[j] = max(cmax[j], grid[i][j]);
ans += grid[i][j] - 1;
}
}
}

// 若i行与j列的最大值相同,就可以把位置(i,j)放上这个最大值的数量的箱子,然后将i行与j列的其他能偷的箱子全部偷走
// 但是若(i,j)原来是0,这个位置就不能放箱子了
for (int i = 1; i <= r; i++)
for (int j = 1; j <= c; j++)
if (rmax[i] == cmax[j] && rmax[i] && grid[i][j])
addedge(i, j + maxn);
hungary();

for (int i = 1; i <= r; i++)
if (rmax[i])
ans -= rmax[i] - 1;
for (int i = 1; i <= c; i++)
if (!mat[i + maxn] && cmax[i])
ans -= cmax[i] - 1;
cout << ans;
return 0;
}


求把上面的代码转为python代码
...全文
402 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouliang0806 2018-01-07
  • 打赏
  • 举报
回复
python 有相应的库,如果是数组,numpy
SoulRed 2017-12-29
  • 打赏
  • 举报
回复
为什么要转?? 如果是学习Python的话,请自己做。 如果是调用的话。直接用第三方库互相调用即可。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧