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应该怎么实现呢???

解决方案 »

  1.   


    例如 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了
    就是实现这个功能,还不太清楚?好像不太好说明白,埃!!
      

  2.   

    你用X来表示矩阵就可以了,不要用Xij,我就把Xij当成元素了。
    X是不是如下所示?
    |0  1  0|
    |0  0  1|
     
      

  3.   

    1.X是不规则矩阵,每行中只有一个1,表示一个人只能到一个地方;
    2.第i个人到的地方是j,第i+1个人到的地方是k,j和k确定了,就知道距离了,j到k和k到j的距离是一样的阿
      

  4.   

    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];
        }}
    结果:
    F:\java>java Test
    第0人去过的地方与第1人去过的地方之间的距离是:
    4
    第1人去过的地方与第2人去过的地方之间的距离是:
    5
    第2人去过的地方与第3人去过的地方之间的距离是:
    7不知道这是不是你想要的结果。
      

  5.   

    改一下:
         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