离散编程,求偏序关系的极大元与极小元

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求偏序集中的极大元与极小元

成绩: 10 / 折扣: 0.9

输入

输入偏序集 <A, £ > , A 中的元素数不超过 20 个,分别用单个小写的英文字母表示。

输入的第一行给出 A 中的各个元素,两个相邻的元素之间用逗号隔开。

输入的第二行给出偏序关系£,用有序对的形式给出,如 <a,b>,<c,a> 等等,两个相邻的有序对之间用逗号隔开。

输出

输出 A 的极小元与极大元。

输出的第一行给出各个极小元,两个相邻元素之间用逗号隔开,输出的元素要求按照英文字母的自然顺序排列输出。

输出的第二行给出各个极大元,两个相邻元素之间用逗号隔开,输出的元素要求按照英文字母的自然顺序排列输出。

测试输入期待的输出时间限制内存限制额外进程

测试用例 1 以文本方式显示

1.a,b,c,d↵

2.<a,b>,<c,d>,<a,a>,<b,b>,<c,c>,<d,d>↵

以文本方式显示

1.a,c↵

2.b,d↵

无限制 1024KB 0

测试用例 2 以文本方式显示

1.a,b,c,d,e,f↵

2.<a,b>,<c,d>,<e,f>,<a,a>,<b,b>,<c,c>,<d,d>,<e,e>,<f,f>↵

以文本方式显示

1.a,c,e↵

2.b,d,f↵

无限制 1024KB 0

源程序

#define N 100

#include"stdio.h"

#include"string.h"

int main( )

{ char b[N],c[N],d[N],e[N]; /* b放元素,c放偏序关系,d放极小元,e放极大元 */ int i,j,m=0,n=0,len1,len2,s;

scanf ( "%s%s",b,c );

len1 = strlen( b );

len2 = strlen( c );

for ( i=0;i<len1; ) /* 求极小元,则它除自反关系外不在关系的后者中出现 */ { for ( j=3;j<len2; )

{ s=j-2;

if ( (( c[s]==c[j] ) || ( b[i]!=c[j] )) && j!=(len2-2) ) j=j+6;

else if ( (( c[s]==c[j] ) || ( b[i]!=c[j] )) && (len2-j==2) )

{ d[m]=b[i];

m++;

i=i+2;

j=j+6;

}

else

{ i=i+2;

break;

}

}

}

for ( i=0;i<len1; ) /* 求极大元,则它除自反关系外不在关系的前者中出现*/

{ for ( j=1;j<len2; )

{ s=j+2;

if ( (( b[i]!=c[j] )||( c[j]==c[s] )) && j!=(len2-4) ) j=j+6;

else if ( (( b[i]!=c[j] ) || ( c[j]==c[s] )) && ( len2-j==4 ) )

{ e[n]=b[i];

i=i+2;

n++;

j=j+6;

}

else

{ i=i+2;

break;

}

}

}

m=m-1;n=n-1;

for ( i=0;i<m; )

{ printf ( "%c",d[i] );

printf ( "," );

i++;

}

printf ( "%c\n",d[i] );

for ( i=0;i<n; )

{ printf ( "%c",e[i] );

printf ( "," );

i++;

}

printf ( "%c\n",e[i] );

}

相关文档
最新文档