Advertisement
Guest User

input rezolúció, de csak UNSAT esetre jó, egyébként végtelen

a guest
Dec 15th, 2017
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.80 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 ConsoleApplication1
  8. {
  9.     class Program
  10.     {
  11.         // hogyan ábrázoljak egy klózt
  12.         // pl: x1 vagy nem x2 vagy x3
  13.         //     1           -2      3
  14.         // x1 vagy nem x3 vagy nem x4
  15.         // 1,-3,-4
  16.         // ez egy int lista
  17.         // azaz a klózokat int listával reprezentálom
  18.         static void Main(string[] args)
  19.         {
  20.             List<int> klóz1 = new List<int> { 1, -2, 3 };
  21.             List<int> klóz2 = new List<int> { 1, -3, -4 };
  22.             List<int> klóz3 = Rezolúció(klóz1, klóz2);
  23.             for (int i = 0; i < klóz3.Count; i++)
  24.             {
  25.                 Console.WriteLine(klóz3[i]);
  26.             }
  27.             Console.ReadLine();
  28.         }
  29.         static int ElentétesPárokSzáma(List<int> klóz1, List<int> klóz2)
  30.         {
  31.             int db = 0;
  32.             foreach(int lit in klóz1)
  33.             {
  34.                 if (klóz2.Contains(-1 * lit)) db++;
  35.             }
  36.             return db;
  37.         }
  38.         static bool LehetERezolúció(List<int> klóz1, List<int> klóz2)
  39.         {
  40.             return ElentétesPárokSzáma(klóz1, klóz2) == 1;
  41.         }
  42.         static List<int> Rezolúció(List<int> klóz1, List<int> klóz2)
  43.         {
  44.             if (!LehetERezolúció(klóz1, klóz2)) return null;
  45.             List<int> rezolvens = new List<int>();
  46.             for (int i = 0; i < klóz1.Count; i++)
  47.             {
  48.                 if (klóz2.Contains(-1 * klóz1[i])) continue;
  49.                 if (klóz2.Contains(+1 * klóz1[i])) continue;
  50.                 rezolvens.Add(klóz1[i]);
  51.             }
  52.             for (int i = 0; i < klóz2.Count; i++)
  53.             {
  54.                 if (klóz1.Contains(-1 * klóz2[i])) continue;
  55.                 rezolvens.Add(klóz2[i]);
  56.             }
  57.             return rezolvens;
  58.         }
  59.         public bool InputRezolúció(List<List<int>> klózSzet)
  60.         {
  61.             if (klózSzet.Count == 0) return true; // az üres klózSzet SAT
  62.             List<int> akt = klózSzet[0];
  63.             while(akt.Count != 0)
  64.             {
  65.                 bool voltE = false;
  66.                 for (int i = 0; i < klózSzet.Count; i++)
  67.                 {
  68.                     if (LehetERezolúció(akt, klózSzet[i]))
  69.                     {
  70.                         akt = Rezolúció(akt, klózSzet[i]);
  71.                         // if (!klózSzet.Cointains(új)) klózSzet.Add(új);
  72.                         klózSzet.Add(akt);
  73.                         voltE = true;
  74.                         break;
  75.                     }
  76.                 }
  77.                 if (voltE == false) return true; // kielégíthető
  78.             }
  79.             return false; // UNSAT
  80.         }
  81.     }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement