-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRomaVictor.h
134 lines (106 loc) · 4.22 KB
/
RomaVictor.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#ifndef ROMA_VICTOR_H
#define ROMA_VICTOR_H
#include "GrafoSt21.h"
typedef struct GrafoSt *Grafo;
/* Funciones extra para el manejo de grafos */
/*
Imprime la información general del grafo, sus vértices con los
correspondientes vecinos y los vertices ordenados, también con sus
vecinos. Usar con cuidado ya que en grafos grandes podría realentizar
la ejecución.
*/
void imprimir_grafo(Grafo graph);
/* Funciones De Construccion/Destruccion/Copia del grafo */
/*
La funcion aloca memoria, inicializa lo que haya que inicializar de
una estructura GrafoSt, lee un grafo desde standard input en el formato
indicado en la seccion 3, lo carga en la estructura, incluyendo algun
orden de los vertices, y devuelve un puntero a la estructura. Como la
carga en si del grafo no incluye los pesos en los lados, inicialmente
le dara peso nulo a cada lado. En caso de error, la funcion devolvera
un puntero a NULL. Si no hay AL MENOS m lineas luego de esa, debe
retornar NULL.
*/
Grafo ConstruccionDelGrafo();
/* Destruye G y libera la memoria alocada. */
void DestruccionDelGrafo(Grafo G);
/*
La funcion aloca memoria suficiente para copiar todos los
datos guardados en G, hace una copia de Gen esa memoria y
devuelve un puntero a esa memoria. En caso de no poder
alocarse suficiente memoria, la funcion devolvera un
puntero a NULL.
*/
Grafo CopiarGrafo(Grafo G);
/* Funciones para extraer informacion de datos del grafo (Deben ser O(1))*/
/* Devuelve el numero de vertices de G. */
u32 NumeroDeVertices(Grafo G);
/* Devuelve el numero de lados de G. */
u32 NumeroDeLados(Grafo G);
/* Devuelve ∆(G), es decir, el mayor grado. */
u32 Delta(Grafo G);
/* Funciones para extraer informacion de los vertices (Deben ser O(1)) */
/*
Devuelve el nombre real del vertice numeroien el orden
guardado en ese momento en G, (el ındice 0 indica el
primer vertice, el ındice 1 el segundo, etc)
*/
u32 Nombre(u32 i, Grafo G);
/*
Devuelve el color con el que esta coloreado el vertice numero i
en el orden guardado en ese momento en G. (el ındice 0 indica el
primer vertice, el ındice 1 el segundo, etc). Si i es mayor o
igual que el numero de v ́ertices, devuelve 2**32-1.
*/
u32 Color(u32 i, Grafo G);
/*
Devuelve el grado del vertice numero i en el orden guardado
en ese momento en G. (el ındice 0 indica el primer vertice,
el ındice 1 el segundo, etc). Si i es mayor o igual que
el numero de vertices, devuelve 2**32−1.
*/
u32 Grado(u32 i, Grafo G);
/* Funciones para extraer informacion de los vecinos de un vertice */
/*
Devuelve el color del vecino numerojdel vertice numero i en
el orden guardado en ese momento en G. (el ındice 0 indica el
primer vertice, el ındice 1 el segundo, etc).
*/
u32 ColorVecino(u32 j, u32 i, Grafo G);
/*
Devuelve el nombre del vecino numero j del vertice numero i en
el orden guardado en ese momento en G. (el ındice 0 indica el
primer vertice, el ındice 1 el segundo, etc).
*/
u32 NombreVecino(u32 j, u32 i, Grafo G);
/*
OrdenVecino(j,i,Grafo G) es igual a k si y solo si
el vecino j-esimo del i-esimo vertice de G en el orden
interno es el k-esimo vertice del orden interno de G.
*/
u32 OrdenVecino(u32 j, u32 i, Grafo G);
/*
Devuelve el peso del lado formado por el i-esimo vertice de G
en el orden interno con el j-esimo vecino de ese vertice.
*/
u32 PesoLadoConVecino(u32 j, u32 i, Grafo G);
/* Funciones para modificar datos de los vertices */
/*
Si i es menor que el numero de vertices, le asigna el color x al
vertice numero i en el orden guardado en ese momento en G y retorna 0.
De lo contrario, retorna 1.
*/
char FijarColor(u32 x, u32 i, Grafo G);
/*
Si i y N son menores que el numero de vertices, fija que el vertice i
en el orden guardado en G sera el N-esimo vertice del orden “natural”
(el que se obtiene al ordenar los vertices en orden creciente de sus
“nombres” reales) y retorna 0. De lo contrario retorna 1.
*/
char FijarOrden(u32 i, Grafo G, u32 N);
/*
Hace que el lado formado por el i-esimo vertice de G en el orden
interno con el j-esimo vecino de ese vertice tenga peso p.
*/
u32 FijarPesoLadoConVecino(u32 j, u32 i, u32 p, Grafo G);
#endif