NikolausHaus (c)Udo Liess 1993..1997 ULi971211 0 /\ / 1 \ 0: -------- 1: |\3 4/| 2| \/ |5 | / \ | 2: -------- 3: 6 2:2013546 2:2013645 2:2046315 2:2046513 2:2053146 2:2056413 2:2103546 2:2103645 2:2146305 2:2146503 2:2153046 2:2156403 2:2350146 2:2351046 2:2364015 2:2364105 2:4015326 2:4015623 2:4026315 2:4026513 2:4035126 2:4036215 2:4105326 2:4105623 2:4126305 2:4126503 2:4135026 2:4136205 2:4530126 2:4531026 2:4562013 2:4562103 2:6301245 2:6304215 2:6310245 2:6314205 2:6324015 2:6324105 2:6501423 2:6502413 2:6510423 2:6512403 2:6542013 2:6542103 3:3012456 3:3012654 3:3042156 3:3046512 3:3056214 3:3056412 3:3102456 3:3102654 3:3142056 3:3146502 3:3156204 3:3156402 3:3240156 3:3241056 3:3265014 3:3265104 3:5014236 3:5014632 3:5024136 3:5026314 3:5036214 3:5036412 3:5104236 3:5104632 3:5124036 3:5126304 3:5136204 3:5136402 3:5420136 3:5421036 3:5463012 3:5463102 3:6201354 3:6205314 3:6210354 3:6215304 3:6235014 3:6235104 3:6401532 3:6403512 3:6410532 3:6413502 3:6453012 3:6453102 ---------------------------------- c-source ---------------------------------- #include struct{int start,end,busy;}way[]= {{0,1,0},{0,1,0},{0,2,0},{0,3,0},{1,2,0},{1,3,0},{2,3,0}}; char path[]=" "; int pointer=0,start=0; void search(int node) { if(pointer==7)printf("%i:%s ",start,path); for(int w=0; w<7; w++) { if(!way[w].busy) { int next=-1; if(node==way[w].start)next=way[w].end; if(node==way[w].end)next=way[w].start; if(next!=-1) { path[pointer++]=w+'0'; way[w].busy=1; search(next); way[w].busy=0; pointer--; } } } } int main() { printf("\nNikolausHaus (c)Udo Liess 1993..1997 ULi971211\n\ 0\n /\\\n / 1 \\\n0: -------- 1:\n |\\3 4/|\n\ 2| \\/ |5\n | / \\ |\n2: -------- 3:\n 6\n"); for(;start<4;start++)search(start); return 0; } --------------------------- original pascal source --------------------------- {$B-} { 1 } uses crt; { /\ } const { / 2 \ } Version='NikolausHaus by Udo Liess DG0KB Jan 30 1993'; { k1 -------- k2 } NachKnoten:array[1..4,1..7] of integer { |\4 5/| } =((2,2,3,4,0,0,0), { 3| \/ |6 } (1,1,0,0,3,4,0), { | / \ | } (0,0,1,0,2,0,4), { k3 -------- k4 } (0,0,0,1,0,2,3)); { 7 } WegFrei:array[1..7] of boolean = (true,true,true,true,true,true,true); Pointer:integer=1; var StartKnoten,Knoten,WegNr,i:integer; Stack:array[1..7,1..2] of integer; Ende:boolean; begin clrscr; writeln(Version); for StartKnoten:=1 to 4 do begin writeln;writeln('Startknoten ',StartKnoten,' :'); Ende:=false; Knoten:=StartKnoten; WegNr:=1; repeat while (WegNr<=7) and ((NachKnoten[Knoten,WegNr]=0) or not WegFrei[WegNr]) do inc(WegNr); if WegNr<=7 then begin WegFrei[WegNr]:=false; Stack[Pointer,1]:=Knoten; Stack[Pointer,2]:=WegNr; inc(Pointer); Knoten:=NachKnoten[Knoten,WegNr]; WegNr:=1; end else begin if Pointer=8 then begin for i:=1 to 7 do write(Stack[i,2]); write(' '); end; if Pointer=1 then Ende:=true else begin dec(Pointer); Knoten:=Stack[Pointer,1]; WegNr:=Stack[Pointer,2]; WegFrei[WegNr]:=true; inc(WegNr); end; end; until Ende; end; repeat until Keypressed; end.