C++ 图中的最大匹配
我有一个有趣的问题:C++ 图中的最大匹配,c++,graph,matrix,C++,Graph,Matrix,我有一个有趣的问题: 我的程序必须找到1的最大数量。 但这还不是全部!。 如果程序已“看到”1,则应清除1所在的整个列和行 我的问题是: 我找不到1的最大数量,我不知道怎么做 我给你举了一个小例子,希望你能明白。程序必须按如下方式运行: struct Matrix4x4 { int m[4][4]; }; Matrix4x4 matrix; for (size_t row = 0; row < 4; ++row) { for (si
我的程序必须找到
1
的最大数量。
但这还不是全部!。
如果程序已“看到”1
,则应清除1
所在的整个列和行
我的问题是:我找不到
1
的最大数量,我不知道怎么做
我给你举了一个小例子,希望你能明白。程序必须按如下方式运行:
struct Matrix4x4
{
int m[4][4];
};
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
有一个矩阵:
1 0 0 0
1 0 1 1
1 1 1 1
1 0 0 1
程序找到了1
(位置[0][0]
我用黑色突出显示了它),并清除了行和列:
在此之后,我们找到下一个1
,清除行和列,依此类推:
最后,程序应打印黑色单元格的数量
在我的例子中,它是4
如何在
C++
code中完成?请帮帮我!谢谢。不清楚如何在矩阵中搜索“下一个”1,以及矩阵是否只能包含0和1。但如果对“下一步”有一个明确的定义,那么您只需按照上面描述的方式编写代码即可。可能的代码段如下所示(未测试,甚至未编译):
注意,这看起来像是一个矩阵奇点类型检查-特别是当1和0是唯一要使用的东西时 你可以检查矩阵的确定性。非零意味着它等于行数和列数(如果矩阵始终为正方形)。如果det(0),则使用任何技术将矩阵简化为简化形式,以查看有多少0’d列-或者只需先进行简化,然后沿对角线计数
按附加值对列进行Heck排序,将以对角线形式显示。这将使检查0列变得非常容易。我不会为您编写所有代码,但会为您提供一些建议,让您走上正轨。您应该了解如何迭代二维数组(矩阵),以及如何迭代该矩阵中的单个行或列 给出如下矩阵的(硬编码)定义:
struct Matrix4x4
{
int m[4][4];
};
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
要对所有元素进行迭代,您需要编写如下内容:
struct Matrix4x4
{
int m[4][4];
};
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
Matrix4x4矩阵;
用于(行大小=0;行数<4;++行)
{
用于(大小\u t列=0;列<4;++列)
{
//使用“matrix.m[row][col]”执行某些操作
}
}
这将在矩阵上从左上角(0,0)到右下角(3,3)进行迭代。我假设这是您被告知要使用的遍历顺序
要处理一行,请编写如下内容:
struct Matrix4x4
{
int m[4][4];
};
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
void函数操作单列(矩阵x4x4和矩阵,大小为行)
{
用于(大小\u t列=0;列<4;++列)
{
//使用“matrix.m[row][col]”执行某些操作
}
}
要处理要编写如下内容的列,请执行以下操作:
struct Matrix4x4
{
int m[4][4];
};
Matrix4x4 matrix;
for (size_t row = 0; row < 4; ++row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnARow(Matrix4x4& matrix, size_t row)
{
for (size_t col = 0; col < 4; ++col)
{
// do something with 'matrix.m[row][col]'
}
}
void FunctionThatOperatesOnAColumn(Matrix4x4& matrix, size_t col)
{
for (size_t row = 0; row < 4; ++row)
{
// do something with 'matrix.m[row][col]'
}
}
void函数,用于操作单列(矩阵x4x4和矩阵,大小\u t列)
{
用于(行大小=0;行数<4;++行)
{
//使用“matrix.m[row][col]”执行某些操作
}
}
您现在需要做的是修改迭代所有元素的第一位代码,并让它检查1。然后需要调用适当的函数来清除当前列和行(可以基于后两个示例)
对于最终结果,您可以在每次检测到1时简单地增加一个局部计数器变量。我更喜欢这样做(请参见下面的代码):使用两个“For”循环,在第二个循环内使用条件“if”添加第三个“For”循环设置为0
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
if(cow[j][i]==1)
{
cnt++;
for(int k=0;k<n;k++)
cow[k][i]=cow[j][k]=0;
break;
}
}
用于(int i=0;我请发布一些您已经尝试过的代码。这个社区是为了帮助代码编写人员,而不是编写所有代码。我不明白。您是否需要清除矩阵,使其数量达到最大值,或者您只需迭代,在找到内容时删除内容,最后计算您找到了多少内容?上一篇我认为s 1有点难。使用“清除”约束,打印的数字不可能超过矩阵的较小维度,并且只有当某行或某列都为零时,它才会小于该数字。这有帮助吗?