构造传递矩阵

时间:2014-03-08 21:07:50

标签: c++ matrix

我正在尝试构建一个程序,首先随机生成一个上象限矩阵(定义为'transmatrix'),其整数值为0和1.接下来,我想分析该矩阵的每个元素。如果在变换矩阵的第i,第j个条目中存在1,那么我想要一个定义为“前向阵列”的新矩阵,在相同的入口位置具有1到10之间的随机生成值。如果在变换矩阵的第i个,第j个条目中存在零,则我希望程序检查并且如果k,i和k,第j个条目都不为零(即,测试传递性)。如果两者都不是零而不是位置i,则前向阵列中的第j个应该具有1到10之间的随机生成值。如果一个为零,则生成一个随机数,rnd,在0和1之间,看它是否小于0.9。如果rnd小于0.9,那么前向阵列中的第i,第j个条目应该是从0到10的随机数字。如果rnd大于0.9,则前向阵列中的第j个位置应该等于零。 问题是'forwardarray'的输出不是上象限矩阵。任何人都可以试着指出我正确的方向吗? 我的代码是:

#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;


int main()

{  ofstream outFile;
   outFile.open("array.dat");

   srand(time(NULL));

   int noofpeople=4;
   outFile << noofpeople << endl;
   outFile << endl;

   int happinesslevels[noofpeople];
   for(int a=0; a<noofpeople; a++)
   {
   happinesslevels[a]=(rand() % 101);      
   outFile << happinesslevels[a] << " ";
   }
   outFile << endl;

/* Generate upper quadrant transmatrix */

double rnd=((double)rand()/RAND_MAX);
int transmatrix[noofpeople][noofpeople];
 for(int b=0; b<noofpeople; b++) {
    for (int c=b+1; c<noofpeople; c++) {
transmatrix[b][c]=(rand() % 2);
          outFile << transmatrix[b][c] << " ";
        }
    outFile << endl;
 }

double forwardarray[noofpeople][noofpeople];
  for(int k=0; k<noofpeople;k++)
  {
      for(int i=k+1; i<noofpeople;i++)
      {
         for(int j=i+1; j<noofpeople;j++)
         {
             if (transmatrix[k][i]==1)
                forwardarray[k][i]=(rand() % 10 + 1);
            else if (transmatrix[k][i]!=1) {
                    if ((transmatrix[k][j]==1) && (transmatrix[i][j]==1))
                forwardarray[k][i]=(rand() % 10 + 1);
                else if  ((transmatrix[k][j]==0) || (transmatrix[i][j]==0)) {
                if (rnd<=0.9)
                forwardarray[k][i]=(rand() % 11);
                else
                forwardarray[k][i]=0;
               }
           }
    outFile << forwardarray[k][i] << " ";

    outFile << endl;
         }
      }

  }
}

我得到的数据是

4

81 37 86 36 
0 0 1 
0 0 
1 

2 
9 
3 
0 

1 个答案:

答案 0 :(得分:0)

“上象限矩阵”是什么意思?因为我可以在代码中看到,你正在创建一个方阵,即行和列的数量相等的矩阵。我不确定你想要实现什么,这个描述似乎非常混乱,而且来源太大 - 你只需要描述问题的最短样本。

我在代码中做了一些更改 - if..else如果可以用if..else替换,并且缩进对读取没有帮助。从最内层循环移动写入指令后,我能够获得“上象限矩阵”,但我不知道这是否是您正在寻找的。算法的描述需要更多关于“k”的作用的说明。

for(int k=0; k<noofpeople;k++)
{
    for(int i=k+1; i<noofpeople;i++)
    {
         for(int j=i; j<noofpeople;j++)
         {
             if (transmatrix[k][i]==1) {
                 forwardarray[k][i]=(rand() % 10 + 1);
             } else {
                 if ((transmatrix[k][j]==1) && (transmatrix[i][j]==1)) {
                     forwardarray[k][i]=(rand() % 10 + 1);
                 } else {
                     if (rnd<=0.9)
                         forwardarray[k][i]=(rand() % 11);
                     else
                         forwardarray[k][i]=0;
                 }
             }
         }
         outFile << forwardarray[k][i] << " ";
    }
    outFile << endl;
}