求一算法,正确答案100分
大家好:我有一问题想请教!
有两个TSTRINGLIST的变量分别为T1,T2,T1中存储三个变量:x,y,z;T2中存储7个变量:a1,a2,a3;b1,b2;c1,c2,T1中的变量与T2中的变量有如下关系:T1中的x后只能接a1,a2,a3;y后只能接b1,b2;z后只能接c1,c2,想找到一种方法遍历T1,T2组成的所有路径,如:
x--a1--y--b1--z--c1
x--a2--y--b1--z--c1
x--a3--y--b1--z--c1
x--a1--y--b2--z--c1
x--a2--y--b2--z--c1
x--a3--y--b2--z--c1
x--a1--y--b1--z--c2
x--a2--y--b1--z--c2
....
总共路径共3*2*2=12条
谢谢!
[解决办法]
var
T1, T2 : TStringList;
O, P, Q : integer;
S : string;
begin
T1 := TStringList.Create;
T1.Add( 'x ');
T1.Add( 'y ');
T1.Add( 'z ');
T2 := TStringList.Create;
T2.Add( 'a1 ');
T2.Add( 'a2 ');
T2.Add( 'a3 ');
T2.Add( 'b1 ');
T2.Add( 'b2 ');
T2.Add( 'c1 ');
T2.Add( 'c2 ');
for Q := 0 to 1 do
for P := 0 to 1 do
for O := 0 to 2 do
begin
S := T1[0] + T2[O] + T1[1] + T2[P+3] + T1[2] + T2[Q+5];
Memo1.Lines.Add(S);
end;
T2.Free;
T1.Free;
end;
[解决办法]
我看不出这个问题和T1有什么关系
A组的只能在第一位
B组的只能在第二位
C组的只能在第三位
建立一个数据库表,
通过查询建立只包涵A的表(a1,a2,a3)
通过查询建立只包涵B的表(b1,b2,b3)
通过查询建立只包涵C的表(c1,c2)
通过笛卡尔积求得所有组合