sgb2alt.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* $Id: sgb2alt.c,v 1.1 1996/10/04 13:33:38 ewz Exp $
  2.  *
  3.  *  sgb2alt.c -- converter from sgb format to alternative format. 
  4.  *
  5.  *  Alternative format:
  6.  *
  7.  *   GRAPH (#nodes #edges id uu vv ww xx yy zz):
  8.  *   <#nodes> <#edges> <id> [all integer utility fields]
  9.  *
  10.  *   VERTICES (index name u v w x y z):
  11.  *   0 <name-node0> [all integer utility fields for node0]
  12.  *   1 <name-node1> [all integer utility fields for node1]
  13.  *   ....
  14.  *   
  15.  *   EDGES (from-node to-node length a b):
  16.  *   <from-node> <to-node> <length> [all integer utility fields]
  17.  *   ....
  18.  *
  19.  */
  20. #include <stdio.h>
  21. #include <strings.h>
  22. #include "gb_graph.h"
  23. #include "gb_save.h"
  24. #include "geog.h"
  25. main(argc,argv)
  26.     int argc;
  27.     char *argv[];
  28. {
  29.     int i, j;
  30.     Vertex *v;
  31.     Arc *a;
  32.     Graph *g;
  33.     FILE *fopen(), *fout;
  34.     if (argc != 3) {
  35.     printf("sgb2old <sgfile> <altfile>nn");
  36.     return;
  37.     }
  38.     fout = fopen(argv[2],"w");
  39.     g = restore_graph(argv[1]);
  40. if (g == NULL) {
  41.       printf("%s does not contain a correct SGB graphn",argv[1]);
  42. return;
  43. }
  44.     fprintf(fout,"GRAPH (#nodes #edges id uu vv ww xx yy zz):n");
  45.     fprintf(fout,"%d %d %s ",g->n, g->m, g->id);
  46.     if (g->util_types[8] == 'I') fprintf(fout,"%ld ",g->uu.I);
  47.     if (g->util_types[9] == 'I') fprintf(fout,"%ld ",g->vv.I);
  48.     if (g->util_types[10] == 'I') fprintf(fout,"%ld ",g->ww.I);
  49.     if (g->util_types[11] == 'I') fprintf(fout,"%ld ",g->xx.I);
  50.     if (g->util_types[12] == 'I') fprintf(fout,"%ld ",g->yy.I);
  51.     if (g->util_types[13] == 'I') fprintf(fout,"%ld ",g->zz.I);
  52.     fprintf(fout,"nn");
  53.     fprintf(fout,"VERTICES (index name u v w x y z):n");
  54.     for (v = g->vertices,i=0; i < g->n; i++,v++) {
  55.         fprintf(fout,"%d %s ",i, v->name); 
  56.         if (g->util_types[0] == 'I') fprintf(fout,"%ld ",v->u.I);
  57.         if (g->util_types[1] == 'I') fprintf(fout,"%ld ",v->v.I);
  58.         if (g->util_types[2] == 'I') fprintf(fout,"%ld ",v->w.I);
  59.         if (g->util_types[3] == 'I') fprintf(fout,"%ld ",v->x.I);
  60.         if (g->util_types[4] == 'I') fprintf(fout,"%ld ",v->y.I);
  61.         if (g->util_types[5] == 'I') fprintf(fout,"%ld ",v->z.I);
  62.         fprintf(fout,"n");
  63.     }
  64.     fprintf(fout,"n");
  65.     fprintf(fout,"EDGES (from-node to-node length a b):n");
  66.     for (v = g->vertices,i=0; i < g->n; i++,v++) 
  67. for (a = v->arcs; a != NULL; a = a->next) {
  68. j = a->tip - g->vertices;
  69. if (j > i) {
  70.     fprintf(fout,"%d %d %d ",i,j,a->len);
  71.     if (g->util_types[6] == 'I') fprintf(fout,"%ld ",a->a.I);
  72.     if (g->util_types[7] == 'I') fprintf(fout,"%ld ",a->b.I);
  73.             fprintf(fout,"n");
  74. }
  75.     }
  76. }