Advertisement
gha890826

graph-visit

Dec 6th, 2019
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. // ConsoleApplication5.cpp : 定義主控台應用程式的進入點。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. using namespace std;
  7. #define map_size 10
  8.  
  9. class node
  10. {
  11. public:
  12.     node(int n){ next = NULL; data = n; }
  13.     int data;
  14.     node *next;
  15. };
  16.  
  17. class list
  18. {
  19. public:
  20.     void push(int);
  21.     list(){ head = NULL; }
  22.     void print();
  23.     node *head;
  24. private:
  25. };
  26.  
  27. void list::push(int push_in)
  28. {
  29.     //cout << "\ncall push\n";
  30.     if (head == NULL)
  31.     {
  32.         head = new node(push_in);
  33.         return;
  34.     }
  35.     node* pos = list::head;
  36.     while (pos->next != NULL)
  37.     {
  38.         pos = pos->next;
  39.     }
  40.     pos->next = new node(push_in);
  41.     //cout << "push end\n";
  42. }
  43.  
  44. void list::print()
  45. {
  46.     node *pos = head;
  47.     while (pos != NULL)
  48.     {
  49.         cout << "[" << pos->data + 1 << "]";
  50.         pos = pos->next;
  51.     }
  52. }
  53.  
  54. class graph
  55. {
  56. public:
  57.     graph(int** in){ map = in; for (int i = 0; i < map_size; i++){ isvisit[i] = 0; } }
  58.     int** map;
  59.     list maplist[map_size];
  60.     void visit(int,bool *,list*);
  61.     bool isvisit[map_size];
  62.     void convert_list();
  63.     void print_list();
  64. };
  65.  
  66. void graph::convert_list()
  67. {
  68.     for (int i = 0; i < map_size; i++)
  69.     {
  70.         for (int j = 0; j < map_size; j++)
  71.         {
  72.             if (map[i][j] == 1)
  73.             {
  74.                 maplist[i].push(j);
  75.             }
  76.         }
  77.     }
  78. }
  79.  
  80. void graph::print_list()
  81. {
  82.     for (int i = 0; i < map_size; i++)
  83.     {
  84.         cout << "V" << i + 1 << " :";
  85.         maplist[i].print();
  86.         cout << endl;
  87.     }
  88. }
  89.  
  90. void graph::visit(int i, bool *isvisit, list* head)
  91. {
  92.     node *ptr;
  93.     isvisit[i] = 1;
  94.     cout << "visit= " << i+1 << endl;
  95.     ptr = head[i].head;
  96.     while(ptr != NULL)
  97.     {
  98.         if (isvisit[ptr->data] == 0)
  99.         {
  100.             visit(ptr->data, isvisit, head);
  101.         }
  102.         ptr = ptr->next;
  103.     }
  104. }
  105.  
  106. int main()
  107. {
  108.     int row_list[map_size][map_size] = {
  109.         { 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 },
  110.         { 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 },
  111.         { 1, 0, 0, 0, 0, 1, 1, 0, 0, 0 },
  112.         { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
  113.         { 0, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
  114.         { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },
  115.         { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },
  116.         { 0, 0, 0, 1, 1, 0, 0, 0, 0, 1 },
  117.         { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1 },
  118.         { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 }, };
  119.     int* mapin[map_size];
  120.     for (int i = 0; i < map_size; i++)
  121.     {
  122.         mapin[i] = row_list[i];
  123.     }
  124.     graph gr1(mapin);
  125.  
  126.     for (int i = 0; i < map_size; i++)
  127.     {
  128.         for (int j = 0; j < map_size; j++)
  129.             cout << gr1.map[i][j] << " ";
  130.         cout << endl;
  131.     }
  132.  
  133.     gr1.convert_list();
  134.     gr1.print_list();
  135.    
  136.     gr1.visit(0, gr1.isvisit, gr1.maplist);
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement