两个矩阵 A,B。
当A经过有限步的行交换或者列交换后能得到B,则定义A和B为等效矩阵。
输入, 2个矩阵
输出,如果A,B是等效矩阵,则输出true,否者输出false.
等效矩阵例子:
A(3*2) = { 0.3,0.7,
0.5,0.2,
0.4,0.6}
B(3*2) = { 0.5,0.2,
0.3,0.7,
0.4,0.6}
C(3*2) = { 0.5,0.2,
0.7,0.3,
0.4,0.6}
A 与B 是等效的(交换第一行与第二行),A 与C是不等效的。
ps:急,思路最重要,有java code更好,谢谢
看看这个思路:
不管行列怎么交换 ,原来在同一列的永远都在同一列,原来在同一行的也是,那就可以先检查第一列,看另个矩阵中是不是有一列和这一列的数字相同(顺序可以不同),然后对每列每行都检查(不能检查检查过的),如果都满足则成立
我给你看看我的测试结果
public class Square {
public static boolean sax(String[][] str,String[][] str1)
{
boolean bool = false;
for(int i=1;i<=2;i++)
{
if(i==1)
{
int sum = 0;
for(int u=0;u<str[0].length;u++)
{
String newstr1l1="";
for(int u1=0;u1<str.length;u1++)
{
newstr1l1=newstr1l1+str[u1][u];
}
for(int u2=0;u2<str1[0].length;u2++)
{
String newstr1l2="";
for(int u3=0;u3<str1.length;u3++)
{
newstr1l2=newstr1l2+str1[u3][u2];
}
if(newstr1l1.equals(newstr1l2))
{
sum++;
}
}
}
if(sum>=str[0].length)
{
bool=true;
}
}
if(i==2)
{
int num=0;
for(int t=0;t<str.length;t++)
{
String strh="";
String strh1="";
for(int t1=0;t1<str[t].length;t1++)
{
strh = strh+str[t][t1];
}
for(int t2=0;t2<str1.length;t2++)
{
for(int t3=0;t3<str1[t2].length;t3++)
{
strh1=strh1+str1[t2][t3];
}
if(strh.equals(strh1))
{
num++;
}
strh1="";
}
}
if(num>=str.length)
{
bool = true;
}
}
}
return bool;
}
public static void main(String[] args) {
String[][] str1 = {{"0.3","0.7"},{"0.5","0.2"},{"0.4","0.6"}};
String[][] str2 = {{"0.5","0.2","0.7"},{"0.3","0.8","0.7"},{"0.4","0.6","0.7"}};
boolean bool = sax(str2,str2);
System.out.println(bool);
}
}
我截图的
只要比较2个条件就能判断:
1、A矩阵,B矩阵是否行数相等,列数相等;
2、比较A矩阵所有元素是否都饱含在B矩阵内;
如果2个条件都满足,我们就判断,A、B为等效矩阵;
这道理也“魔方”是一样的,只要行列一样,元素一样,顺序不管什么用,经过一系列的行列交换,最终一定能从A得到B...所以我们只要判断上面两个条件满足即可断定。