Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.29 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. namespace Lista9v3
  5. {
  6.     class Program
  7.     {
  8.         static int[,] graf;
  9.         static int[,] zbior;
  10.         static int wielkoscZbioru;
  11.         static Random losowa = new Random();
  12.         static List<List<int>> key = new List<List<int>>();
  13.  
  14.         static void Main(string[] args)
  15.         {
  16.             int w, p;
  17.             Console.Write("Podaj ile wierzcholkow ma miec graf >> ");
  18.             w = Convert.ToInt32(Console.ReadLine());
  19.             Console.Write("Podaj prawdopodobienstwo ilosci krawedzi wychodzacych z wierzcholka >> ");
  20.             p = Convert.ToInt32(Console.ReadLine());
  21.             p = losowa.Next(1, p);
  22.  
  23.             zbior = new int[w * w, 2];
  24.             wielkoscZbioru = w * w;
  25.             createZbior(w, p);
  26.             clearZbior();
  27.  
  28.             graf = new int[w, 2];
  29.             createGraf(w);
  30.  
  31.             lista(w);
  32.             BFS(w);
  33.         }
  34.  
  35.         static void BFS(int w)
  36.         {
  37.             int start, szukany, licznik = 0;
  38.  
  39.             Console.WriteLine("");
  40.             Console.Write("Podaj wierzcholek startowy >> ");
  41.             start = Convert.ToInt32(Console.ReadLine());
  42.             Console.Write("Podaj wierzcholek szukany >> ");
  43.             szukany = Convert.ToInt32(Console.ReadLine());
  44.  
  45.             bool[] visit = new bool[w+1];
  46.             int[] licz = new int[w+1];
  47.             Queue<int> kolejka = new Queue<int>();
  48.  
  49.             for(int i = 0; i < w; i++)
  50.             {
  51.                 visit[i] = false;
  52.                 licz[i] = -1;
  53.             }
  54.  
  55.             licznik++;
  56.             kolejka.Enqueue(start);
  57.             visit[start] = true;
  58.             licz[start] = licznik;
  59.             bool f = false;
  60.             List<int> next;
  61.  
  62.                 while (kolejka.Count > 0 && !f)
  63.                 {
  64.                     start = kolejka.Dequeue();
  65.                     visit[start] = true;
  66.                 Console.WriteLine("Sciagam liczbe z kolejki " + start + " sprawdzam czy jest równa szukanej = " + szukany);
  67.                     if (start == szukany)
  68.                     {
  69.                     Console.WriteLine("Znalazlem");
  70.                         licznik++;
  71.                         licz[szukany] = licznik;
  72.                     f = true;
  73.                     }
  74.                     else
  75.                     {
  76.                         licznik++;
  77.                         next = key[start];
  78.                     Console.Write("Wczytuje do kolejnki nastepnikow: ");
  79.                         for (int i = 0; i < next.Count; i++)
  80.                         {
  81.                             if (!visit[next[i]])
  82.                              {
  83.                              kolejka.Enqueue(next[i]);
  84.                                 licz[next[i]] = licznik;
  85.                                 Console.Write(next[i] + " ");
  86.                              }
  87.                         }
  88.                     Console.WriteLine("");
  89.                     }
  90.                 }
  91.  
  92.  
  93.                 for (int i = 0; i < w; i++)
  94.                 {
  95.                     if (visit[i])
  96.                     {
  97.                        
  98.                     }
  99.                 }
  100.         }
  101.      
  102.         static void lista(int w)
  103.         {
  104.             for(int i = 0; i <= w; i++)
  105.             {
  106.                 List<int> next = new List<int>();
  107.  
  108.                 for(int j = 0; j < w; j++)
  109.                 {
  110.                     if(graf[j, 0] == i)
  111.                     {
  112.                         next.Add(graf[j, 1]);
  113.                     }
  114.                 }
  115.                 key.Add(next);
  116.             }
  117.             listaShow(w);
  118.         }
  119.  
  120.         static void listaShow(int w)
  121.         {
  122.             List<int> next;
  123.  
  124.             for(int i = 0; i < w; i++)
  125.             {
  126.                 next = key[i];
  127.                 if (next.Count > 0)
  128.                 {
  129.                     Console.WriteLine("");
  130.                     Console.Write(i + " ");
  131.  
  132.                     for (int j = 0; j < next.Count; j++)
  133.                     {
  134.                         Console.Write(next[j] + " ");
  135.                     }
  136.                 }
  137.             }
  138.         }
  139.  
  140.         static void clearZbior()
  141.         {
  142.             int v1, v2;
  143.  
  144.             for (int j = 0; j < wielkoscZbioru; j++)
  145.             {
  146.                 v1 = zbior[j, 0];
  147.                 v2 = zbior[j, 1];
  148.  
  149.                 if (v1 == v2)
  150.                 {
  151.                     zbior[j, 0] = zbior[wielkoscZbioru - 1, 0];
  152.                     zbior[j, 1] = zbior[wielkoscZbioru - 1, 1];
  153.                     wielkoscZbioru--;
  154.                 }
  155.             }
  156.         }
  157.  
  158.         static void clearZbior(int l)
  159.         {
  160.             zbior[l, 0] = zbior[wielkoscZbioru - 1, 0];
  161.             zbior[l, 1] = zbior[wielkoscZbioru - 1, 1];
  162.  
  163.             wielkoscZbioru--;
  164.         }
  165.  
  166.         static void createZbior(int w, int p)
  167.         {
  168.             int liczba = 1, licznik = 0;
  169.  
  170.             while (liczba <= w)
  171.             {
  172.                 for (int i = licznik; i < w + licznik; i++)
  173.                 {
  174.                     zbior[i, 0] = liczba;
  175.                 }
  176.  
  177.                 for (int j = 1; j <= w; j++)
  178.                 {
  179.                     zbior[(j - 1) + licznik, 1] = j;
  180.                 }
  181.  
  182.                 liczba++;
  183.                 licznik = licznik + w;
  184.             }
  185.             wielkoscZbioru--;
  186.         }
  187.  
  188.  
  189.         static void createGraf(int w)
  190.         {
  191.             int l;
  192.  
  193.             for (int i = 0; i < w; i=i+2)
  194.             {
  195.                 l = losowa.Next(0, wielkoscZbioru - 1);
  196.  
  197.                 graf[i, 0] = zbior[l, 0];
  198.                 graf[i, 1] = zbior[l, 1];
  199.                 graf[i + 1, 0] = zbior[l, 1];
  200.                 graf[i + 1, 1] = zbior[l, 0];
  201.  
  202.                 for(int j = 0; j < wielkoscZbioru; j++)
  203.                 {
  204.                     if(zbior[j, 0] == graf[i + 1, 0] && zbior[j, 1] == graf[i + 1, 1])
  205.                     {
  206.                         clearZbior(j);
  207.                         break;
  208.                     }
  209.                 }
  210.  
  211.                 clearZbior(l);
  212.             }
  213.  
  214.             showgraf(w);
  215.         }
  216.  
  217.         static void showgraf(int w)
  218.         {
  219.             for (int i = 0; i < w; i++)
  220.             {
  221.                 Console.WriteLine(graf[i, 0] + " " + graf[i, 1]);
  222.             }
  223.         }
  224.     }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement