pascal 穷举法做

一、 问题描述:
来自不同国家的4位留学生A,B,C,D在一起交谈,他们每人只会中、英、法、日4种语言中的2种,情况是:没有人既能讲日语又能讲法语;A能讲日语,D不会日语,但A和D能互相交谈,B不8会英语,但A和C交谈时却要B当翻译;B,C,D3人想互相交谈,但找不到共同的语言;只有一种语言3人都会。请编程确定这四人分别会哪两种语言。

老师给的标程,给你把
program l3(input,output);
label 10;
var a:array[1..4,1..4] of integer;
x:array[1..5,1..2] of integer;
i,xi,ai,b,c,d,j,m,m1,m2,m3:integer;
begin
x[1,1]:=2;x[1,2]:=4;x[2,1]:=1;x[2,2]:=4;x[3,1]:=1;x[3,2]:=3;
x[4,1]:=1;x[4,2]:=2;x[5,1]:=2;x[5,2]:=3;
for ai:=1 to 2 do
begin
a[1,x[ai,1]]:=1;a[1,x[ai,2]]:=1;
for b:=2 to 3 do
begin
a[2,x[b,1]]:=1;a[2,x[b,2]]:=1;
for c:=1 to 5 do
begin
a[3,x[c,1]]:=1;a[3,x[c,2]]:=1;
for d:=3 to 5 do
begin
a[4,x[d,1]]:=1;a[4,x[d,2]]:=1;
m:=0;m1:=0;m2:=0;m3:=0;
for i:=1 to 4 do
begin
if (a[1,i]=1) and (a[3,i]=1)then goto 10;
xi:=a[2,i]+a[3,i]+a[4,i];
if xi=3 then goto 10;
xi:=xi+a[1,i];
if xi=3 then m:=m+1;
if (a[1,i]=1) and (a[2,i]=1) then m1:=m1+1;
if (a[2,i]=1) and (a[3,i]=1) then m2:=m2+1;
if (a[1,i]=1) and (a[4,i]=1) then m3:=m3+1;
end;
if (m<>1) or (m1<1) or (m2<1) or (m3<1) then goto 10;
for i:=1 to 4 do
begin
write(chr(i+64),': ');
for j:=1 to 4 do
if a[i,j]=1 then
case j of
1:writeln('Chinese');
2:writeln('English');
3:writeln('French');
4:writeln('Japanese');
end
end;
writeln;
10:a[4,x[d,1]]:=0;a[4,x[d,2]]:=0;
m:=0;m1:=0;m2:=0;m3:=0;
end;
a[3,x[c,1]]:=0;a[3,x[c,2]]:=0;
end;
a[2,x[b,1]]:=0;a[2,x[b,2]]:=0;
end;
a[1,x[ai,1]]:=0;a[1,x[ai,2]]:=0;
end;
end.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-11-12
产生全排列,可以用dfs

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网