Advertisement
Guest User

Untitled

a guest
May 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.92 KB | None | 0 0
  1. from tkinter import *
  2. import math
  3.  
  4.  
  5.  
  6. def print_inside(arr,size_sm,flag):  #Получние ответа в V символике
  7.     keus = {"A":"V1", "B":"V2","C":"V3", "D":"V4","E":"V5", "F":"V6", "G":"V7","H":"V8", "I":"V9","K":"V10", "L":"V11","M":"V12", "N":"V13", "O":"V14"}
  8.     if (flag == 2):
  9.         for i in range(len(arr)):
  10.             arr[i] = sorted(list(arr[i]))
  11.             for j in range(len(arr[i])):
  12.                 arr[i][j] = keus[arr[i][j]]
  13.             arr[i] = "".join(arr[i])
  14.         return arr
  15.     else :
  16.         alf = list(("ABCDEFGHIKLMNOPQRSTVXYZ")[0:size_sm])
  17.         for i in range(len(arr)):
  18.             arr[i] = sorted(list(set(alf)-set(arr[i])))
  19.             for j in range(len(arr[i])):
  20.                 arr[i][j] = keus[arr[i][j]]
  21.             arr[i] = "".join(arr[i])
  22.     return arr
  23.  
  24.  
  25. def create_dnf(arr): #Создание днф, основная функция с нее все начинается.
  26.     alf = list("ABCDEFGHIKLMNOPQRSTVXYZ")
  27.     for i in range(len(arr)):
  28.         for j in range(len(arr[i])):
  29.             arr[i][j] = alf[(arr[i][j])-1]
  30.     for i in range(0,len(arr)-1):
  31.         arr[i+1] = conuct(arr[i],arr[i+1])
  32.     return arr
  33.  
  34.  
  35.    
  36. def conuct(a,b):    #Перемножение
  37.     arr = []
  38.     for i in range(len(a)):
  39.         for j in range(len(b)):
  40.             arr.append(str(a[i])+str(b[j]))
  41.     arr = cheak_on_sv(arr)
  42.     return arr
  43. def cheak_on_sv(arr):
  44.         arr,n = idem(arr)
  45.         arr,m = poglo(arr)
  46.         while(m!=0 or n!=0):
  47.             arr,m = idem(arr)
  48.             arr,n = poglo(arr)
  49.         return arr
  50. def cheak_poglo(word1, word2):
  51.     if (len(word1) > len(word2)):
  52.         return 0
  53.     same = 0
  54.     for i in range(len(word1)):
  55.         if (word1[i] in word2):
  56.             same+=1
  57.     return (same == len(word1))
  58.            
  59.    
  60. def idem(arr): #Реализация операции идемпотентности
  61.     n = 0
  62.     m = 0
  63.     for i in arr:
  64.         for j in i:
  65.             while((i.count(j)>1)):
  66.                 if(i.count(j)>1):
  67.                     i = list(i)
  68.                     m=1
  69.                     del i[i.index(j)]
  70.         i = "".join(i)
  71.         arr[n] = i
  72.         n+=1
  73.     arr2 = []
  74.     for i in range(len(arr)):
  75.         if (arr[i] not in arr2):
  76.             arr[i] = list(arr[i])
  77.             arr[i].reverse()
  78.             arr[i] = "".join(arr[i])
  79.             if (arr[i] not in arr2):
  80.                 arr[i] = list(arr[i])
  81.                 arr[i].reverse()
  82.                 arr[i] = "".join(arr[i])
  83.                 arr2.append(arr[i])
  84.        
  85.     return arr2,m
  86.  
  87.  
  88. def poglo(arr): #Реализация операции поглощение
  89.     n = 1
  90.     h = 0
  91.     while(n!=0):
  92.         n = 0
  93.         arr2 = []
  94.         for i in range(len(arr)):
  95.             for j in range(len(arr)):
  96.                 if(i!=j and arr[i]!="0" and arr[j]!= "0"):
  97.                     if(cheak_poglo(arr[i],arr[j]) == 1):
  98.                        arr2.append(arr[i])
  99.                        n=1
  100.                        h = 1
  101.                        arr[i] = "0"
  102.                        arr[j] = "0"
  103.                        break
  104.         if (n!=0):
  105.             arr = [arr[i] for i in range(len(arr)) if arr[i]!="0" ]
  106.             arr = arr + arr2          
  107.        
  108.     return arr,h
  109.        
  110.    
  111.            
  112. def exit_root():
  113.     root.destroy()
  114.  
  115.    
  116. def ker():
  117.     arr = list(text.get('1.0', 'end').split("\n"))
  118.     del arr[len(arr)-1]
  119.     for i in range(len(arr)):
  120.         arr[i] = arr[i].split(" ")
  121.         arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
  122.     text_print = main(arr, len(arr[i]))[2]
  123.     print(text_print)
  124.     text2.insert("1.0",str(" ".join(text_print))+"\n")
  125.  
  126.    
  127. def inside():
  128.     arr = list(text.get('1.0', 'end').split("\n"))
  129.     del arr[len(arr)-1]
  130.     for i in range(len(arr)):
  131.         arr[i] = arr[i].split(" ")
  132.         arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
  133.     text_print = main(arr, len(arr[i]))[0]
  134.     print(text_print)
  135.     text2.insert("1.0",str(" ".join(text_print))+"\n" )
  136.  
  137.    
  138. def external():
  139.     arr = list(text.get('1.0', 'end').split("\n"))
  140.     del arr[len(arr)-1]
  141.     for i in range(len(arr)):
  142.         arr[i] = arr[i].split(" ")
  143.         arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
  144.     text_print = main(arr, len(arr[i]))[1]
  145.     print(text_print)
  146.     max_len = 0
  147.     for i in text_print:
  148.         if len(i) > max_len:
  149.             max_len = len(i)
  150.             word = i
  151.     text_print = word
  152.     text2.insert("1.0", str("".join(text_print))+"\n")
  153. def clear():
  154.     text.delete("0.0", END)
  155.     text2.delete("0.0",END)
  156.            
  157.  
  158. def main(arr, n):
  159.     arr_sm = []
  160.     for i in range(n):
  161.         for j in range(n):
  162.             if (arr[i][j] == 1):
  163.                 arr_sm.append([i+1,j+1])
  164.     arr_inside = create_dnf(arr_sm)[(len(arr_sm)-1)]
  165.  
  166.  
  167.     #Прибавляем к исходной матрицк смежности единичную
  168.  
  169.     for i in range(n):
  170.         arr[i][i] = 1
  171.     #Создание формулы для внешне устойчивого множества
  172.     arr_sm = []
  173.     # создадим промежуточный массив для удобства
  174.     arr_rabish = []
  175.     for i in range(n):
  176.         for j in range(n):
  177.             if (arr[i][j] == 1):
  178.                 arr_rabish.append(j+1)
  179.         arr_sm.append(arr_rabish)
  180.         arr_rabish = []
  181.     arr_external = create_dnf(arr_sm)[(len(arr_sm)-1)]
  182.     #Вывод на экран
  183.     ans1 = print_inside(arr_inside,n,1)
  184.     ans2 = print_inside(arr_external,n,2)
  185.     ans3 = list(set(ans1)&set(ans2))
  186.  
  187.     return ans1, ans2, ans3
  188.  
  189.  
  190.  
  191.  
  192. #Реализация графики        
  193. root = Tk()
  194. root.geometry("500x300")
  195. #root.configure(bg = "#F5DEB3")
  196.  
  197.  
  198.  
  199. root.title("Курсовой проект ")
  200. global text
  201. text = Text(root, width = 33, height = 13,wrap=WORD)
  202. text.place(x = 0, y = 24)
  203.  
  204. #button = Button(root, text = "Ядро", width = 32, command = ker)
  205. #button.place(x = 270, y = 1)
  206. button1 = Button(root,text = "Выход", width = 20, command = exit_root)
  207. button1.place(x = 350, y = 273)
  208. ##button2 = Button(text = "Внутри устойчивое множество", width = 32, command = inside)
  209. ##button2.place(x =270, y = 1)
  210. button3 = Button(text = "Внешне устойчивое множество",width = 32, command = external)
  211. button3.place(x =270, y = 1)
  212. button4 = Button(text = "Очистить поля ввода",width = 20, command = clear)
  213. button4.place(x = 0, y = 273)
  214. #button.configure(bg = "#D2B48C")
  215. #button1.configure(bg = "#D2B48C")
  216. #button2.configure(bg = "#D2B48C")
  217. #button3.configure(bg = "#D2B48C")
  218. #button4.configure(bg = "#D2B48C")
  219. label = Label(root, width = 29, text = "Введите таблицу смежности:", font = "Times 12")
  220. label.place(x = 0, y = 0)
  221. global text2
  222. text2 = Text(root, width = 30, height = 5, wrap = WORD)
  223. text2.place(x = 270, y = 152)
  224.  
  225.  
  226. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement