Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Grafy___moja_implementacja
- {
- class Graf
- {
- int v;
- int e;
- List<int>[] listaSasiedztwa;
- public Graf (int v)
- {
- this.v = v;
- this.e = 0;
- this.listaSasiedztwa = new List<int>[v];
- for (int i = 0; i < v; i++)
- this.listaSasiedztwa[i] = new List<int>();
- }
- public void DodajKrawedz(int v1, int v2)
- {
- v1--;
- v2--;
- if (v1 > v || v2 > v || v1 < 0 || v2 < 0)
- {
- Console.WriteLine("Podano nieprawidlowy/e wierzcholki grafu!");
- return;
- }
- listaSasiedztwa[v1].Add(v2);
- //listaSasiedztwa[v2].Add(v1); //Jak odkomentuję te dwie linie, to wtedy graf nie będzie skierowany!
- listaSasiedztwa[v1].Sort();
- //listaSasiedztwa[v2].Sort();
- e++;
- }
- public int LiczbaWierzcholkow
- {
- get { return v; }
- }
- public int LiczbaKrawedzi
- {
- get { return e; }
- }
- public void WyswietlListeSasiedztwa()
- {
- for (int i=0;i<v;i++)
- {
- Console.Write((i+1)+" { ");
- foreach (var item in listaSasiedztwa[i])
- {
- Console.Write((item+1)+"\t");
- }
- Console.Write("}\n");
- }
- }
- public int[] DFS() //Przeszukiwanie w glab
- {
- int[] DFS = new int[v];
- Stack<int> doOdwiedzenia = new Stack<int>();
- bool[] odwiedzone = new bool[v];
- for (int i = 0; i < v; i++) odwiedzone[i] = false;
- doOdwiedzenia.Push(0);
- odwiedzone[0] = true;
- int l = 0;
- while (doOdwiedzenia.Count >0)
- {
- int pobrany = doOdwiedzenia.Pop();
- DFS[l++] = pobrany;
- for (int i = listaSasiedztwa[pobrany].Count - 1; i >= 0; i--)
- {
- if (odwiedzone[listaSasiedztwa[pobrany][i]] == false) { doOdwiedzenia.Push(listaSasiedztwa[pobrany][i]); odwiedzone[listaSasiedztwa[pobrany][i]] = true; }
- }
- }
- return DFS;
- }
- public int[] BFS()
- {
- int[] BFS = new int[v];
- Queue<int> doOdwiedzenia = new Queue<int>();
- bool[] odwiedzone = new bool[v];
- for (int i = 0; i < v; i++) odwiedzone[i] = false;
- doOdwiedzenia.Enqueue(0);
- odwiedzone[0] = true;
- int l = 0;
- while (doOdwiedzenia.Count > 0)
- {
- int pobrany = doOdwiedzenia.Dequeue();
- if (l < v) BFS[l++] = pobrany;
- for (int i=0;i<listaSasiedztwa[pobrany].Count;i++)
- {
- if (odwiedzone[listaSasiedztwa[pobrany][i]] == false) { doOdwiedzenia.Enqueue(listaSasiedztwa[pobrany][i]); odwiedzone[listaSasiedztwa[pobrany][i]] = true; }
- }
- }
- return BFS;
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Graf g1 = new Graf(6);
- g1.DodajKrawedz(1, 2);
- g1.DodajKrawedz(1, 3);
- g1.DodajKrawedz(2, 5);
- g1.DodajKrawedz(2, 4);
- g1.DodajKrawedz(5, 4);
- g1.DodajKrawedz(3, 6);
- g1.DodajKrawedz(3, 4);
- g1.DodajKrawedz(4, 1);
- g1.WyswietlListeSasiedztwa();
- int[] DFS = g1.DFS();
- Console.Write("\nDFS: \t");
- foreach (var item in DFS)
- {
- Console.Write((item+1) + "\t");
- }
- int[] BFS = g1.BFS();
- Console.Write("\nBFS: \t");
- foreach (var item in BFS)
- {
- Console.Write((item + 1) + "\t");
- }
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement