F=Cjk*Xij*Xi+1,k
其中假设Cjk=[1 2 3
2 3 4
4 5 6]
Xij和Xi+1,k均取0或者1,
我要实现的意思是:当i选择j,i+1选择k即Xij=Xi+1k=1时,根据j和k相应的值到Cjk中找到相应的值相乘,例如
xij=[0 1
0 0 1]
则i=0时j=1,i+1=1而k=2,则相应的Cjk为C12=4,则F=4这种功能用java应该怎么实现呢???
其中假设Cjk=[1 2 3
2 3 4
4 5 6]
Xij和Xi+1,k均取0或者1,
我要实现的意思是:当i选择j,i+1选择k即Xij=Xi+1k=1时,根据j和k相应的值到Cjk中找到相应的值相乘,例如
xij=[0 1
0 0 1]
则i=0时j=1,i+1=1而k=2,则相应的Cjk为C12=4,则F=4这种功能用java应该怎么实现呢???
例如 xij表示第i个人选择第j个地方
xij=[0 1
0 0 1]
此时x01=1,x12=1,也就是第0个人选择了第1个地方,第1个人选择了第2个地方
此时j=1,k=2,则相应的第1个地方到第2个地方的距离是c12=4(根据已知矩阵cij)
这样就可以计算f了
就是实现这个功能,还不太清楚?好像不太好说明白,埃!!
X是不是如下所示?
|0 1 0|
|0 0 1|
2.第i个人到的地方是j,第i+1个人到的地方是k,j和k确定了,就知道距离了,j到k和k到j的距离是一样的阿
public static void main(String[] args) throws Exception{
int[][] m1={
{0, 7, 4, 9},
{7, 0, 5, 6},
{4, 5, 0, 2},
{9, 6, 2, 0}
};
int[][] m2={
{1},
{0, 0, 1},
{0, 1},
{0, 0, 0, 4}
};
for(int i=0;i<=2;i++){
System.out.println("第"+i+"人去过的地方与第"+(i+1)+"人去过的地方之间的距离是:");
System.out.println(getDistance(m1,m2,i));
}
}
/*求第i个人去过的地方与第i+1个人去过的地方之间的距离
* @param matrixC 各个地方之间的距离
* @param matrixX 每个人去过什么地方
* @param i 第i个人。
*/
public static int getDistance(int[][] matrixC,int[][] matrixX,int i){
return getDistance(matrixC,matrixX,i,i+1);
} /*求第i个人去过的地方与第k个人去过的地方之间的距离
* @param matrixC 各个地方之间的距离
* @param matrixX 每个人去过什么地方
* @param i 第i个人。
* @param k 第k个人。
*/
public static int getDistance(int[][] matrixC,int[][] matrixX,int i,int k){
if(i>matrixX.length-1||i<0||k>matrixX.length-1||k<0) return -1;
int targetI=0,targetI1=0;
/*求i去过什么地方
*/
for(int j=0;j<matrixX[i].length;j++){
if(matrixX[i][j]==1){
targetI=j;
break;
}
}
/*求j去过什么地方
*/
for(int j=0;j<matrixX[k].length;j++){
if(matrixX[i+1][j]==1){
targetI1=j;
break;
}
}
return matrixC[targetI][targetI1];
}}
结果:
F:\java>java Test
第0人去过的地方与第1人去过的地方之间的距离是:
4
第1人去过的地方与第2人去过的地方之间的距离是:
5
第2人去过的地方与第3人去过的地方之间的距离是:
7不知道这是不是你想要的结果。
int[][] m2={
{1},
{0, 0, 1},
{0, 1},
{0, 0, 0, 1}
};修改之后的结果如下:
F:\java>java Test
第0人去过的地方与第1人去过的地方之间的距离是:
4
第1人去过的地方与第2人去过的地方之间的距离是:
5
第2人去过的地方与第3人去过的地方之间的距离是:
6