Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- import math
- def print_inside(arr,size_sm,flag): #Получние ответа в V символике
- 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"}
- if (flag == 2):
- for i in range(len(arr)):
- arr[i] = sorted(list(arr[i]))
- for j in range(len(arr[i])):
- arr[i][j] = keus[arr[i][j]]
- arr[i] = "".join(arr[i])
- return arr
- else :
- alf = list(("ABCDEFGHIKLMNOPQRSTVXYZ")[0:size_sm])
- for i in range(len(arr)):
- arr[i] = sorted(list(set(alf)-set(arr[i])))
- for j in range(len(arr[i])):
- arr[i][j] = keus[arr[i][j]]
- arr[i] = "".join(arr[i])
- return arr
- def create_dnf(arr): #Создание днф, основная функция с нее все начинается.
- alf = list("ABCDEFGHIKLMNOPQRSTVXYZ")
- for i in range(len(arr)):
- for j in range(len(arr[i])):
- arr[i][j] = alf[(arr[i][j])-1]
- for i in range(0,len(arr)-1):
- arr[i+1] = conuct(arr[i],arr[i+1])
- return arr
- def conuct(a,b): #Перемножение
- arr = []
- for i in range(len(a)):
- for j in range(len(b)):
- arr.append(str(a[i])+str(b[j]))
- arr = cheak_on_sv(arr)
- return arr
- def cheak_on_sv(arr):
- arr,n = idem(arr)
- arr,m = poglo(arr)
- while(m!=0 or n!=0):
- arr,m = idem(arr)
- arr,n = poglo(arr)
- return arr
- def cheak_poglo(word1, word2):
- if (len(word1) > len(word2)):
- return 0
- same = 0
- for i in range(len(word1)):
- if (word1[i] in word2):
- same+=1
- return (same == len(word1))
- def idem(arr): #Реализация операции идемпотентности
- n = 0
- m = 0
- for i in arr:
- for j in i:
- while((i.count(j)>1)):
- if(i.count(j)>1):
- i = list(i)
- m=1
- del i[i.index(j)]
- i = "".join(i)
- arr[n] = i
- n+=1
- arr2 = []
- for i in range(len(arr)):
- if (arr[i] not in arr2):
- arr[i] = list(arr[i])
- arr[i].reverse()
- arr[i] = "".join(arr[i])
- if (arr[i] not in arr2):
- arr[i] = list(arr[i])
- arr[i].reverse()
- arr[i] = "".join(arr[i])
- arr2.append(arr[i])
- return arr2,m
- def poglo(arr): #Реализация операции поглощение
- n = 1
- h = 0
- while(n!=0):
- n = 0
- arr2 = []
- for i in range(len(arr)):
- for j in range(len(arr)):
- if(i!=j and arr[i]!="0" and arr[j]!= "0"):
- if(cheak_poglo(arr[i],arr[j]) == 1):
- arr2.append(arr[i])
- n=1
- h = 1
- arr[i] = "0"
- arr[j] = "0"
- break
- if (n!=0):
- arr = [arr[i] for i in range(len(arr)) if arr[i]!="0" ]
- arr = arr + arr2
- return arr,h
- def exit_root():
- root.destroy()
- def ker():
- arr = list(text.get('1.0', 'end').split("\n"))
- del arr[len(arr)-1]
- for i in range(len(arr)):
- arr[i] = arr[i].split(" ")
- arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
- text_print = main(arr, len(arr[i]))[2]
- print(text_print)
- text2.insert("1.0",str(" ".join(text_print))+"\n")
- def inside():
- arr = list(text.get('1.0', 'end').split("\n"))
- del arr[len(arr)-1]
- for i in range(len(arr)):
- arr[i] = arr[i].split(" ")
- arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
- text_print = main(arr, len(arr[i]))[0]
- print(text_print)
- text2.insert("1.0",str(" ".join(text_print))+"\n" )
- def external():
- arr = list(text.get('1.0', 'end').split("\n"))
- del arr[len(arr)-1]
- for i in range(len(arr)):
- arr[i] = arr[i].split(" ")
- arr[i] = [int(arr[i][j])for j in range(len(arr[i]))]
- text_print = main(arr, len(arr[i]))[1]
- print(text_print)
- max_len = 0
- for i in text_print:
- if len(i) > max_len:
- max_len = len(i)
- word = i
- text_print = word
- text2.insert("1.0", str("".join(text_print))+"\n")
- def clear():
- text.delete("0.0", END)
- text2.delete("0.0",END)
- def main(arr, n):
- arr_sm = []
- for i in range(n):
- for j in range(n):
- if (arr[i][j] == 1):
- arr_sm.append([i+1,j+1])
- arr_inside = create_dnf(arr_sm)[(len(arr_sm)-1)]
- #Прибавляем к исходной матрицк смежности единичную
- for i in range(n):
- arr[i][i] = 1
- #Создание формулы для внешне устойчивого множества
- arr_sm = []
- # создадим промежуточный массив для удобства
- arr_rabish = []
- for i in range(n):
- for j in range(n):
- if (arr[i][j] == 1):
- arr_rabish.append(j+1)
- arr_sm.append(arr_rabish)
- arr_rabish = []
- arr_external = create_dnf(arr_sm)[(len(arr_sm)-1)]
- #Вывод на экран
- ans1 = print_inside(arr_inside,n,1)
- ans2 = print_inside(arr_external,n,2)
- ans3 = list(set(ans1)&set(ans2))
- return ans1, ans2, ans3
- #Реализация графики
- root = Tk()
- root.geometry("500x300")
- #root.configure(bg = "#F5DEB3")
- root.title("Курсовой проект ")
- global text
- text = Text(root, width = 33, height = 13,wrap=WORD)
- text.place(x = 0, y = 24)
- #button = Button(root, text = "Ядро", width = 32, command = ker)
- #button.place(x = 270, y = 1)
- button1 = Button(root,text = "Выход", width = 20, command = exit_root)
- button1.place(x = 350, y = 273)
- ##button2 = Button(text = "Внутри устойчивое множество", width = 32, command = inside)
- ##button2.place(x =270, y = 1)
- button3 = Button(text = "Внешне устойчивое множество",width = 32, command = external)
- button3.place(x =270, y = 1)
- button4 = Button(text = "Очистить поля ввода",width = 20, command = clear)
- button4.place(x = 0, y = 273)
- #button.configure(bg = "#D2B48C")
- #button1.configure(bg = "#D2B48C")
- #button2.configure(bg = "#D2B48C")
- #button3.configure(bg = "#D2B48C")
- #button4.configure(bg = "#D2B48C")
- label = Label(root, width = 29, text = "Введите таблицу смежности:", font = "Times 12")
- label.place(x = 0, y = 0)
- global text2
- text2 = Text(root, width = 30, height = 5, wrap = WORD)
- text2.place(x = 270, y = 152)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement