定义voidfunc(charnode,intka)、关键算法描述()初始化用来存放顺序的数组为''for(i=i<=i)初始化用来存放顺序的数组为''si=''()存放测试数据的条件及标记这些条件for(i=i<=ni)存放测试数据的条件及标记这些条件{ai=''scanf("s",ai)}()寻找条件中有等于号的确定该位医生的值班时间并通过该位医生确定其他与这位医生有关医生的值班时间for(i=i<=ni)寻找条件中有等于号的确定该位医生的值班时间并通过该位医生确定其他与这位医生有关医生的值班时间{if(ai=='='){ka=ai''ska=ainode=aiai=''把已确定时间的条件标记为'',避免再次确定位置(避免重复搜索该条件)func(node,ka)调用函数确定与该医生有关系的医生的值班时间}}()考虑有些条件没有等于号且还未确定值班时间的医生通过假设该医生的位置同时确定与该医生有关的医生值班时间for(i=i<=ni)考虑有些条件没有等于号且还未确定值班时间的医生通过假设该医生的位置同时确定与该医生有关的医生值班时间{if(ai=='')判断是否被标记过{node=ais=node假设该医生的时间是在ka=记录该医生的位置func(node,ka)同过函数确定与该医生有关的医生与该医生的相对位置}}()星期一到星期五是否都有医生值班for(i=i<=i)判断星期一到星期五是否都有医生值班if(si==''){aa=iflag=如果哪一天没人值班记下那一天的时间并把flag标记为break}()通过假设的位置填充到数组的相应位置if(flag==)通过假设的位置填充到数组的相应位置{for(i=i<=i)if(si!=''){ab=ibreak}for(i=aai<=i){if(si=='')si=sabaai}}()输出医生值班的顺序表for(i=i<=i)输出医生值班的顺序表printf("c",si)putchar()换行()实现用已知医生及位置确定与其相关的医生的位置voidfunc(charnode,intka)实现用已知医生及位置确定与其相关的医生的位置{charnode,ka,kbintjfor(j=j<=nj){if(aj!='')判断是否已确定位置的条件{if(aj==node||aj==node)判断是否与已知的医生有关的条件{aj=''把该条件标记为'',避免再次使用确定该条件中还未确定位置的另一位医生的位置if(aj!=node){if(aj=='<')kb=aj''elsekb=(aj'')skakb=ajnode=ajka=kakbfunc(node,ka)把该医生作为已知位置的医生来确定其他与这医生有关的医生}else{if(aj=='<')kb=(aj'')elsekb=(aj'')skakb=ajnode=ajka=kakbfunc(node,ka)把该医生作为已知位置的医生来确定其他与这医生有关的医生}}}}}三、测试用例测试用例:输入:ABB>GFCF=输出:EDBFCAG测试用例:输入:A>BB>CC>DD>EE>FF>G输出:ABCDEFG测试用例:输入:B>DD=A>DCG输出:BADCFGE测试用例:输入:A>BCDD>EE>FG=输出:ABCDEFG测试用例:输入:A>BCDD>EE>FG=输出:GABCDEF测试用例:输入:ABB>GF>BF>CF=输出:EDFBCAG测试用例:输入:A>BD
EEBCDD>EE>FG=输出:ABCDEFG