Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <stdio.h>
00024 #include <sys/types.h>
00025 #include <sys/stat.h>
00026 #include <unistd.h>
00027 #include <stdlib.h>
00028 #include <fcntl.h>
00029 #include <time.h>
00030 #include <errno.h>
00031 #include <math.h>
00032
00033 #include "../type.h"
00034 #include "../graph.h"
00035
00036 #include "opt.h"
00037
00038 static int _clipper(dglGraph_s * pgraphIn,
00039 dglGraph_s * pgraphOut,
00040 dglSpanClipInput_s * pArgIn,
00041 dglSpanClipOutput_s * pArgOut, void *pvArg)
00042 {
00043 return 0;
00044 }
00045
00046 int main(int argc, char **argv)
00047 {
00048 dglGraph_s graph, graphOut;
00049 dglInt32_t nVertex;
00050 int nret, fd;
00051
00052
00053
00054 char *pszGraph;
00055 char *pszGraphOut;
00056 char *pszVertex;
00057
00058 GNO_BEGIN
00059 GNO_OPTION("g", "graph", NULL, &pszGraph, "Input Graph file")
00060 GNO_OPTION("o", "graphout", NULL, &pszGraphOut, "Output Graph file")
00061 GNO_OPTION("v", "vertex", NULL, &pszVertex, "Vertex Node Id")
00062 GNO_END if (GNO_PARSE(argc, argv) < 0)
00063 {
00064 return 1;
00065 }
00066
00067
00068
00069
00070 if (pszVertex == NULL) {
00071 GNO_HELP("minspan usage");
00072 return 1;
00073 }
00074 nVertex = atol(pszVertex);
00075
00076 printf("Graph read:\n");
00077 if ((fd = open(pszGraph, O_RDONLY)) < 0) {
00078 perror("open");
00079 return 1;
00080 }
00081 nret = dglRead(&graph, fd);
00082 if (nret < 0) {
00083 fprintf(stderr, "dglRead error: %s\n", dglStrerror(&graph));
00084 return 1;
00085 }
00086 close(fd);
00087 printf("Done.\n");
00088
00089 printf("Graph minimum spanning:\n");
00090 nret = dglMinimumSpanning(&graph, &graphOut, nVertex, _clipper, NULL);
00091 if (nret < 0) {
00092 fprintf(stderr, "dglMinimumSpanning error: %s\n",
00093 dglStrerror(&graph));
00094 return 1;
00095 }
00096 printf("Done.\n");
00097
00098
00099 printf("Graph flatten:\n");
00100 nret = dglFlatten(&graphOut);
00101 printf("Done.\n");
00102
00103 if (dglGet_EdgeCount(&graphOut) > 0) {
00104
00105
00106 if (pszGraphOut) {
00107 printf("Graph write:\n");
00108 if ((fd =
00109 open(pszGraphOut, O_WRONLY | O_CREAT | O_TRUNC, 0666)) < 0) {
00110 perror("open");
00111 return 1;
00112 }
00113 dglWrite(&graphOut, fd);
00114 if (nret < 0) {
00115 fprintf(stderr, "dglWrite error: %s\n",
00116 dglStrerror(&graphOut));
00117 return 1;
00118 }
00119 close(fd);
00120 printf("Done.\n");
00121 }
00122 }
00123 else {
00124 printf("Empty span. No output produced.\n");
00125 }
00126
00127 dglRelease(&graph);
00128 dglRelease(&graphOut);
00129 return 0;
00130 }