资源

字母块问题(clpe02)

/***************************************************************//*                                                             *//*S A S S A M P L E L I B R A R Y*//*                                                             *//*名称:clpe02*//*标题:字母块问题(clpe02)*//*产品:或*//*系统:所有*//*关键字:或*//*程序:CLP*//*数据:*//*                                                             *//*支持:更新:*//*参考:*//*MISC:CLP程序章节中的示例2*//*约束编程书*//*                                                             *//***************************************************************/proc-clp-out=out;/*除Q和Z之外的每个字母都用一个变量表示*//*每个变量的域是4个块的集合*//*或简称{1,2,3,4}*/var(A B C D E F G H I J K L M N O P R S T U V W X Y)=[1,4];/*每个字母块上正好有6个字母*/gcc(A B C D E F G H I J K L N O P R S T U V W X Y)=((1, 6, 6)(2, 6, 6)(3, 6, 6)(4, 6, 6) );/*注1:由于lv=uv=6,所有v=1,。。。,4; 上述全球基数约束也可以指定为:gcc(A B C D E F G H I J K L M N O P R S T U V W X Y)=(DL=6 DU=6);*//*每个单词中的字母必须位于不同的块上*/gcc(B A K E)=(DL=0 DU=1)(O N Y X)=(DL=0 DU=1)(E C H O)=(DL=0 DU=1)(O V A L)=(DL=0 DU=1)(G I R D)=(DL=0 DU=1)(S M U G)=(DL=0 DU=1)(J U M P)=(DL=0 DU=1)(T O R N)=(DL=0 DU=1)(L U C K)=(DL=0 DU=1)(V I N Y)=(DL=0 DU=1)(L U S H)=(DL=0 DU=1)(W R A P)=(DL=0 DU=1);/*注2:这些限制也可以通过ALLDIFF约束来实施:所有差异(B A K E)(O N Y X)(E C H O)(O V A L)(G I R D)(S M U G)(J U M P)(T O R N)(L U C K)(V I N Y)(L U S H)(W R A P);*//*通过设置打破块可以互换的对称性包含字母B作为块1的块包含字母A作为block2等*/直线B=1;林康A=2;林肯K=3;直线E=4;运行;/*打印机友好输出格式*/proc转置数据=输出=输出1;运行;进程排序数据=out1;按col1;运行;数据输出2;放线1;按col1;var=大写(名称);如果first.col1,则cnt=1;否则cnt+1;保留碳纳米管;运行;进程排序数据=out2;按col1;运行;proc transpose data=out2 out=out3(drop=_name_)prefix=Side;按col1;var-var;id cnt;运行;proc打印数据=out3(rename=(col1=块))noobs;标题“字母块问题的解决方案”;运行;