日期:2014-05-20  浏览次数:20741 次

功能数组相乘问题
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应该怎么实现呢???

------解决方案--------------------
Java code
public class Test{
    
    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];
    }

}