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 | /*
* grafo - graph editor
* Copyright (c) 2003-2008
* Murilo Vicente Goncalves da Silva <murilo@pet.inf.ufpr.br>
* Oliver Matias van Kaick <oliver@pet.inf.ufpr.br>
* Ulisses Cordeiro Pereira <ulisses@cordeiropereira.com.brr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details (file COPYING).
*/
/* ******************* */
/* * vertexexample.c * */
/* ******************* */
/* Plugin example: This program does not compute anything useful.
* It is an example of how to use the "special vertex" list.
* The vertices in this list will be highlighted in the GRAFO
* interface.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Here the GRAFO headers */
#include "../pgin.h"
#include "../graph.h"
#include "../list.h"
/* You have to fill the pgin struct with information about your plugins.
* Each position of the pgin struct is related with some function you
* have programed. Below one example where you programmed five functions:
*
* Pgin pgin[6] = {
* { PGIN_RESULT_ALG, "Find a Hamilton Path", "HPath", 0 },
* { PGIN_TEST_ALG, "Test Planarity", "PlanarGraph", 0 },
* { PGIN_TEST_ALG, "Test Bergeness", "BergeGraph", 0 },
* { PGIN_TRANSF, "Compute the complement", "Compl", PGIN_FLAG_NOREDRAW },
* { PGIN_TRANSF, "Line Graph", "LineGraph", 0 },
* { PGIN_LIST_END, NULL, NULL, 0 },
* };
*
* In the last position you should put { PGIN_LIST_END, NULL, NULL }, to
* end the list of plugins.
* You have to put four pieces of information in the pgin struct:
* -> The first is the class of your algorithm. The first entry
* above is a Result Algorithm, so you have to put PGIN_RESULT_ALG
* -> The second (in this case "Highest Degree") is the name that will
* appear in the menu of GRAFO.
* -> The third is the name of the function in the code (in this
* case "MaxDegree").
* -> The fourth is a set of plugin flags. In the example of the
* fouth funtion the flag prevents that GRAFO redraws the resulting graph.
* If you do not know what is a "plugin flag", only put 0 in this field.
*/
/* Plugin Information */
Pgin pgin[2] = {
{ PGIN_RESULT_ALG, "Highest Degree", "MaxDegree" },
{ PGIN_LIST_END, NULL, NULL },
};
/* The pgin_info() function should always be present. GRAFO will call
* it to get the plugin information.
*/
Pgin *pgin_info(void);
Pgin *pgin_info(void){
return pgin;
}
/* Plugin example: This program does not compute anything useful.
* It is an example of how to use the "special vertex" list.
* Here this list have the name verts. The vertices in this list will
* be highlighted in the GRAFO interface.
* In this example, the function finds the vertex with the highest
* degree (acctualy one of them) and put it in the verts list. */
int MaxDegree(Graph *G, char *mess, List *arc_edges, List *verts);
int MaxDegree(Graph *G, char *mess, List *arc_edges, List *verts){
Node N;
int i,maxdeg;
/* Test if graph is empty */
if (G->size < 1) {
sprintf(mess, "%s", "Empty graph!");
return 1;
}
/* Find the vertex with max degree */
maxdeg = 0;
for (i = 1; i < G->size; i++) {
if (G->vertex[i].degree > G->vertex[maxdeg].degree) {
maxdeg = i;
}
}
/* Place maxdeg in the Node */
N = MakeNode(&maxdeg, sizeof(int));
/* Place the node in the list of "special vertex" */
InsertNode(verts, N);
return 1;
}
/* ******* */
/* * End * */
/* ******* */
|