Advertisement
Guest User

Untitled

a guest
Feb 21st, 2019
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node // структура ноды
  5. {
  6.     char node_name;        // имя ноды, номер (для удобства)
  7.     char num_edge;         // количество путей, выходящих из ноды
  8.     struct edge *node_out; // пути которые выходят из ноды
  9. };
  10.  
  11. struct edge // структура пути
  12. {
  13.     char edge_name;        // имя пути, номер (для удобства)
  14.     char weight;           // вес пути
  15.     struct node *edge_out; // адрес ноды, на которую указывает путь
  16. };
  17.  
  18. int ini_node(const char, struct node *, const char, const struct edge *, ...); // инициализация параметров ноды
  19. int ini_edge(const char, struct edge *, const char, const struct node *);      // инициализация параметров пути
  20.  
  21. // ==================================
  22.  
  23. int main(void)
  24. {
  25.     struct node point[5] = {}; // сеть с 5 нодами и 6 путями
  26.     struct edge path[6] = {};
  27.  
  28.     // характер соединения ноды и путей
  29.     ini_edge(0, &path[0], 5, &point[1]);
  30.     ini_edge(1, &path[1], 5, &point[2]);
  31.     ini_edge(2, &path[2], 5, &point[2]);
  32.     ini_edge(3, &path[3], 5, &point[3]);
  33.     ini_edge(4, &path[4], 5, &point[2]);
  34.     ini_edge(5, &path[5], 5, &point[4]);
  35.  
  36.     ini_node(0, &point[0], 2, &path[0], &path[1]);
  37.     ini_node(1, &point[1], 1, &path[2]);
  38.     ini_node(2, &point[2], 1, &path[3]);
  39.     ini_node(3, &point[3], 2, &path[4], &path[5]);
  40.     ini_node(4, &point[4], 0, 0);
  41.  
  42.     return 0;
  43. }
  44.  
  45. // ===================================
  46.  
  47. int ini_node(const char name, struct node *mnode, const char mnum_edge, const struct edge *in_edge, ...)
  48. { // <имя ноды>, <адрес инициализируемой ноды>, <количество выходящих из ноды путей>, <адреса на эти пути>
  49.     mnode->node_name = name;
  50.     mnode->num_edge = mnum_edge;
  51.     mnode->node_out = malloc(mnum_edge * sizeof(struct edge));
  52.     for (size_t i = 0; i < mnum_edge; i++)
  53.     {
  54.         mnode->node_out[i] = in_edge[i];
  55.     }
  56.  
  57.     return 0;
  58. }
  59.  
  60. int ini_edge(const char name, struct edge *medge, const char edweight, const struct node *out)
  61. { // <имя пути>, <адрес инициализируемой пути>, <вес пути>, <адрес ноды, куда указывает путь>
  62.     medge->edge_name = name;
  63.     medge->weight = edweight;
  64.     medge->edge_out = malloc(sizeof(struct node));
  65.     medge->edge_out = out;
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement