Sei sulla pagina 1di 1

C:\Users\domen\Documents\Algoritmi e Strutture Dati\Miei Codici\COMPITI DA STAMPARE\12112014.

cpp venerdì 29 gennaio 2016 17:05


/*
Scrivere il codice di una funzione C che, dato un grafo diretto G, restituisca
in una lista i nodi presenti all'interno dei cicli.
*/
#include <stdio.h>
#include <stdlib.h>

typedef struct node{


int nodo;
struct node *next;
}Nodo;

typedef struct {
double **m, *potentials;
int numnodes, *path, patlen;

ia
} Graph;

double **matalloc(int nrows, int ncols) {


double **m;
int i;

er
m = (double **) calloc(nrows, sizeof(double *));

for (i = 0; i < nrows; i++)


m[i] = (double *) calloc(ncols, sizeof(double));

gn
return m;
}

//Potenza n-esima di una matrice quadrata


void matXmatN(double** original, double** res, int dim, int order) {
int i, j, k;
double tmp[dim][dim];
ge
for(i=0;i<dim;++i)
for(j=0;j<dim;++j)
tmp[i][j]=original[i][j];

while(order>1){
for (i = 0; i < dim; i++)
In
for (j = 0; j < dim; j++) {
res[i][j] = 0.0;
for (k = 0; k < dim; k++)
res[i][j] += original[i][k] * tmp[k][j];
}

for(i=0;i<dim;++i)
re

for(j=0;j<dim;++j)
tmp[i][j]=res[i][j];

--order;
}
ve

}
//Inserisce in una lista gli elementi della diagonale diversi da 0
Nodo * cycles(Graph *g, int n){
Nodo *lista=NULL,*nuovo;
int i,j;
double **matrix;
Vi

matXmatN(g->m,matrix,g->numnodes,n);

for(i=0;i<g->numnodes;++i)
if(matrix[i][i]!=0){
nuovo=(Nodo*)malloc(sizeof(Nodo));
nuovo->next=lista;
nuovo->nodo=matrix[i][i];
lista=nuovo;
}
return lista;
}

-1-