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

laotizi 2017-12-28 08:45:53
#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代码
...全文
361 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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