如何找到工作之间的反向关系?

时间:2011-09-13 11:22:44

标签: c++

我一直试图找到工作之间的反向关系。更具体地说,我将用一个例子告诉它。

假设我有n个工作,{0,1,2,3,4,...n}。我也有工作关系。我只知道继任工作,即2后跟4,55之后是7,8等。我将其放在文本文件中。我想获得工作之间的优先关系(5的前任工作是什么?)。

有文字输出会很棒。我有一些代码,但它不起作用。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;

#define TOTAL_ACTIVITY 123

void readFile();
void change ();
void writeFile ();

struct Activity {
    int precedessor [3];
    int successor [3];
    int id;
};

Activity activityList[TOTAL_ACTIVITY];

void main() {
    readFile();
    change();
    writeFile();
}

void  readFile() {
    ifstream myReadFile;
    myReadFile.open("pre.txt");
    if (!myReadFile) { //check whether the file can be opened
        cerr << "Unable to open file"; // terminate with error
    }

    while (!myReadFile.eof()) {
        int Id,suc1, suc2, suc3;
        int t = 0;
        while (myReadFile >> Id >>  suc1 >> suc2 >> suc3) //data should be in this order
        {
            activityList[t].id = Id;
            activityList[t].successor [0] = suc1;
            activityList[t].successor [1] = suc2;
            activityList[t].successor [2] = suc3;
            t++;
        }
    }
    return;
}

void change() {
    int act;
    for (int i=1;i<TOTAL_ACTIVITY;i++){
        for (int j=0;j<TOTAL_ACTIVITY;j++){
            for (int k=0;k<3;k++) {
                if (activityList[j].successor[k]==i;)
            }
        }
    }
}

void writeFile() {
    ofstream out("out.txt");
    out << "id\t" << "Pre1\t" << "Pre2\t" << "Pre3\t"<<"\n";
    for (int j = 0; j < TOTAL_ACTIVITY; j++) {
        out << activityList[j].id << "\t";
        out << activityList[j].precedessor[0]<< "\t";
        out << activityList[j].precedessor[1] << "\t";
        out << activityList[j].precedessor[2] << "\t";
        out << "\n"; 
    }
    out.close();
}

以下是输入示例:

ID  Successor1  Successor2  Successor3
1   2   3   4
2   6   11  15
3   7   8   13
4   5   9   10
5   20      
6   30      
7   27      
8   12  19  27
9   14      
10  16  25  
11  20  26  
12  14      
13  17  18  
14  17      
15  25      
16  21  22  
17  22      
18  20  22  
19  24  29  
20  23  25  
21  28      
22  23      
23  24      
24  30      
25  30      
26  31      
27  28      
28  31      
29  32      
30  32      
31  32      

输出应该是这样的:

Id Predecesor1  Predecesor2  Predecesor3
........................................
...........................................
...........................................

1 个答案:

答案 0 :(得分:1)

您获得了工作的继承人,但您无需保留此信息。

例如,如果我说:5 -> 6, 7意味着5后跟67,则相当于说67前面有5,右边。

然后你可以:

  • 在阅读后继者时直接输出优先级
  • 存储在关联容器中,使用作业密钥作为密钥,将前导作为值

详细信息......供您完成作业。