Мне нужно сделать 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;
}
Может ли кто-нибудь указать мне, что я делаю не так?