Функции, которые перечисляют все элементы, которые получают и дают определенный ответ типа ребра - График реализован с помощью матрицы смежности - C ++ - PullRequest
0 голосов
/ 08 июля 2019

Мне нужно сделать 2 функции, которые возвращают список всех людей, которые получают определенную эмоцию типа ребра, и список тех, которые дают определенную эмоцию типа ребра в ориентированном графе, реализованном с помощью матрицы смежности. Это структуры, которые определяют граф, и у нас также есть структура для функции, которая представляет список, который мы будем возвращать в функциях:

//namespace reteSociale
const int maxNumPersone = 20;    //matrix's max size 
typedef enum {ama, stima, odia, no, err} Sentimento; //emotions on the edges
typedef string Persona;           //actual nodes

typedef struct {
  int numPersone;                               // number of nodes
  Sentimento rel[maxNumPersone][maxNumPersone]; // the matrix
  Persona nome[maxNumPersone];                  // associaztion index of matrix - node
} ReteSociale;

//namespace listaPersone
struct ListaElem {
  Persona p;
  ListaElem *next;
};
typedef ListaElem *ListaPersone;
const ListaPersone listaVuota = NULL;

Вот вспомогательная функция, которую я должен использовать, чтобы добавить узлы, которые дают / получают определенную эмоцию типа ребра:

void listaPersone::insert(ListaPersone& l, Persona p)
{
    ListaPersone aux;
    aux->next = listaVuota; //inserisco in fondo
    aux->p = p;
    l = aux;
    delete aux;
}

И вспомогательная функция, которая возвращает индекс в матрице заданного узла:

int lookup(const ReteSociale &rs, Persona p) {
    for (int i = 0; i < maxNumPersone; ++i) {
        if (rs.nome[i] == p)
            return i;
    }
    return -1;
}

Вот моя реализация двух функций, которая, кажется, не работает:

listaPersone::ListaPersone reteSociale::provaSentimentoVerso(const ReteSociale& rs, Persona p, Sentimento s) //list of nodes from whom exits a certain emotion edge
{
    listaPersone::ListaPersone l = listaVuota;
    int index = lookup(rs, p);
    for (int i = 0; i < rs.numPersone; ++i)
        if (rs.rel[i][index] == s)
            listaPersone::insert(l, p);
    return l;
}

listaPersone::ListaPersone reteSociale::riceveSentimentoDa(const ReteSociale& rs, Persona p, Sentimento s) //list of nodes who receive a certain emotion edge
{
    listaPersone::ListaPersone l = listaVuota;
    int index = lookup(rs, p);
    for (int i = 0; i < rs.numPersone; ++i)
        if (rs.rel[i][index] == s)
            listaPersone::insert(l, p);
    return l;
}

Может ли кто-нибудь указать мне, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...