2017-10-06 29 views
0

给定一个10 * 10矩阵,填充0〜9。我们只需要在每行和每列垂直列中选择3个整数,以确保我们选择的整数在矩阵中最大。如何使用CLIPS(c语言集成生产系统)?附:每行和垂直列只能有0〜9个一次。在矩阵中使用CLIPS进行选择

+0

目前还不清楚你在问什么。如果每一行/列在每一列/行中只有一个0-9,你会选择9,8和7. –

+0

是的,似乎我应该选择9,8和7.那么我怎样才能使用CLIPS选择它们? –

回答

0

这里是你如何找到的元素为行

CLIPS> 
(deftemplate element 
    (slot row) 
    (slot column) 
    (slot value)) 
CLIPS>  
(deffacts start 
    (element (row 1) (column 1) (value 3)) 
    (element (row 1) (column 2) (value 5)) 
    (element (row 1) (column 3) (value 9)) 
    (element (row 1) (column 4) (value 8)) 
    (element (row 1) (column 5) (value 1)) 
    (element (row 1) (column 6) (value 7)) 
    (element (row 1) (column 7) (value 2)) 
    (element (row 1) (column 8) (value 4)) 
    (element (row 1) (column 9) (value 0)) 
    (element (row 1) (column 10) (value 6)) 

    (element (row 2) (column 1) (value 1)) 
    (element (row 2) (column 2) (value 3)) 
    (element (row 2) (column 3) (value 5)) 
    (element (row 2) (column 4) (value 7)) 
    (element (row 2) (column 5) (value 9)) 
    (element (row 2) (column 6) (value 0)) 
    (element (row 2) (column 7) (value 8)) 
    (element (row 2) (column 8) (value 6)) 
    (element (row 2) (column 9) (value 4)) 
    (element (row 2) (column 10) (value 2))) 
CLIPS>  
(defrule largest-in-row 
    (element (row ?r) (column ?c1) (value ?v1)) 
    (not (element (row ?r) (column ~?c1) (value ?v&:(> ?v ?v1)))) 
    (element (row ?r) (column ?c2&~?c1) (value ?v2)) 
    (not (element (row ?r) (column ~?c1&~?c2) (value ?v&:(> ?v ?v2)))) 
    (element (row ?r) (column ?c3&~?c2&~?c1) (value ?v3)) 
    (not (element (row ?r) (column ~?c1&~?c2&~?c3) (value ?v&:(> ?v ?v3)))) 
    => 
    (printout t "r" ?r " : c" ?c1 "=" ?v1 " c" ?c2 "=" ?v2 " c" ?c3 "=" ?v3 crlf)) 
CLIPS> (reset) 
CLIPS> (run) 
r2 : c5=9 c7=8 c4=7 
r1 : c3=9 c4=8 c6=7 
CLIPS>