gpt4 book ai didi

c - 检查二维矩阵是否对称的程序的奇怪问题

转载 作者:行者123 更新时间:2023-11-30 14:49:05 24 4
gpt4 key购买 nike

我目前正在开发一个测试二维矩阵是否对称的程序。代码:

int IsSym (int ** rels, int universe)
{
int ii, jj;
for ( ii = 1; ii < universe; ii++)
{
for ( jj = ii; jj < universe; jj++)
{
if (rels[ii][jj] != rels[jj][ii])
{
return 0;
}
}
}
return 1;
}

现在,此代码只需搜索一半矩阵即可确定是否对称。它通过简单地检查一侧值是否等于另一侧值来实现这一点。然而,它似乎并不总是有效。例如,如果我这样输入数据

1 1
2 2

将按预期工作并说它是对称的。然而

1 1
2 2
2 1

不会。该问题似乎与输入的行值高于列值有关。

现在我知道我可以通过遍历整个矩阵并检查来解决这个简单的问题。但我更好奇为什么这样设置不起作用?

最佳答案

问题就在这里,您正在使用额外的 ! 和矩阵元素:

if (rels[ii][jj] != !rels[jj][ii])
{
return 0;
}

应该是:

if (rels[ii][jj] != rels[jj][ii])
return 0;
任何非零数字的

! 给出 0,否则给出 1。解释见以下代码:

int a[2][2] = {{1,2}, {0,0}};
for(size_t i=0;i<2;i++)
for(size_t j=0;j<2;j++)
printf("%d ",!a[i][j]);
return 0;

输出将是:

0 0 1 1 

关于c - 检查二维矩阵是否对称的程序的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50004874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com