Advertisement
Guest User

Grafy (DFS,BFS, ListaSasiedztwa, DodawanieKrawedzi)

a guest
Jan 23rd, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.15 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace Grafy___moja_implementacja
  8. {
  9.  
  10.     class Graf
  11.     {
  12.         int v;
  13.         int e;
  14.         List<int>[] listaSasiedztwa;
  15.        
  16.         public Graf (int v)
  17.         {
  18.             this.v = v;
  19.             this.e = 0;
  20.             this.listaSasiedztwa = new List<int>[v];
  21.             for (int i = 0; i < v; i++)
  22.                 this.listaSasiedztwa[i] = new List<int>();
  23.         }
  24.  
  25.         public void DodajKrawedz(int v1, int v2)
  26.         {
  27.             v1--;
  28.             v2--;
  29.             if (v1 > v || v2 > v || v1 < 0 || v2 < 0)
  30.             {
  31.                 Console.WriteLine("Podano nieprawidlowy/e wierzcholki grafu!");
  32.                 return;
  33.             }
  34.             listaSasiedztwa[v1].Add(v2);
  35.             //listaSasiedztwa[v2].Add(v1);          //Jak odkomentuję te dwie linie, to wtedy graf nie będzie skierowany!
  36.             listaSasiedztwa[v1].Sort();
  37.             //listaSasiedztwa[v2].Sort();
  38.             e++;
  39.         }
  40.  
  41.         public int LiczbaWierzcholkow
  42.         {
  43.             get { return v; }
  44.         }
  45.         public int LiczbaKrawedzi
  46.         {
  47.             get { return e; }
  48.         }
  49.  
  50.         public void WyswietlListeSasiedztwa()
  51.         {
  52.             for (int i=0;i<v;i++)
  53.             {
  54.                 Console.Write((i+1)+" { ");
  55.                 foreach (var item in listaSasiedztwa[i])
  56.                 {
  57.                     Console.Write((item+1)+"\t");
  58.                 }
  59.                 Console.Write("}\n");
  60.             }
  61.         }
  62.  
  63.         public int[] DFS() //Przeszukiwanie w glab
  64.         {
  65.             int[] DFS = new int[v];
  66.             Stack<int> doOdwiedzenia = new Stack<int>();
  67.             bool[] odwiedzone = new bool[v];
  68.             for (int i = 0; i < v; i++) odwiedzone[i] = false;
  69.             doOdwiedzenia.Push(0);
  70.             odwiedzone[0] = true;
  71.             int l = 0;
  72.             while (doOdwiedzenia.Count >0)
  73.             {
  74.                 int pobrany = doOdwiedzenia.Pop();
  75.                 DFS[l++] = pobrany;
  76.                 for (int i = listaSasiedztwa[pobrany].Count - 1; i >= 0; i--)
  77.                 {
  78.                     if (odwiedzone[listaSasiedztwa[pobrany][i]] == false) { doOdwiedzenia.Push(listaSasiedztwa[pobrany][i]); odwiedzone[listaSasiedztwa[pobrany][i]] = true; }
  79.                     }
  80.             }
  81.             return DFS;
  82.         }
  83.  
  84.         public int[] BFS()
  85.         {
  86.             int[] BFS = new int[v];
  87.             Queue<int> doOdwiedzenia = new Queue<int>();
  88.             bool[] odwiedzone = new bool[v];
  89.             for (int i = 0; i < v; i++) odwiedzone[i] = false;
  90.             doOdwiedzenia.Enqueue(0);
  91.             odwiedzone[0] = true;
  92.             int l = 0;
  93.             while (doOdwiedzenia.Count > 0)
  94.             {
  95.                 int pobrany = doOdwiedzenia.Dequeue();
  96.                 if (l < v) BFS[l++] = pobrany;
  97.                 for (int i=0;i<listaSasiedztwa[pobrany].Count;i++)
  98.                 {
  99.                     if (odwiedzone[listaSasiedztwa[pobrany][i]] == false) { doOdwiedzenia.Enqueue(listaSasiedztwa[pobrany][i]); odwiedzone[listaSasiedztwa[pobrany][i]] = true; }
  100.                 }
  101.             }
  102.             return BFS;
  103.         }
  104.     }
  105.     class Program
  106.     {
  107.         static void Main(string[] args)
  108.         {
  109.             Graf g1 = new Graf(6);
  110.             g1.DodajKrawedz(1, 2);
  111.             g1.DodajKrawedz(1, 3);
  112.             g1.DodajKrawedz(2, 5);
  113.             g1.DodajKrawedz(2, 4);
  114.             g1.DodajKrawedz(5, 4);
  115.             g1.DodajKrawedz(3, 6);
  116.             g1.DodajKrawedz(3, 4);
  117.             g1.DodajKrawedz(4, 1);
  118.             g1.WyswietlListeSasiedztwa();
  119.             int[] DFS = g1.DFS();
  120.             Console.Write("\nDFS: \t");
  121.             foreach (var item in DFS)
  122.             {
  123.                 Console.Write((item+1) + "\t");
  124.             }
  125.             int[] BFS = g1.BFS();
  126.             Console.Write("\nBFS: \t");
  127.             foreach (var item in BFS)
  128.             {
  129.                 Console.Write((item + 1) + "\t");
  130.             }
  131.             Console.ReadKey();
  132.         }
  133.     }
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement