level 1
朴素的算法
program p1016;
var map:array[1..3,1..3] of longint;
way,use:array[1..10000] of longint;
i,j,min:longint;
procedure zhuan(a,b:longint);
begin
if map[a,b]=3 then map[a,b]:=0
else inc(map[a,b]);
end;
procedure dao(a,b:longint);
begin
if map[a,b]=0 then map[a,b]:=3
else dec(map[a,b]);
end;
function can:boolean;
var i,j:longint;
begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
if map[i,j]<>0 then exit(false);
end;
exit(true);
end;
procedure print(a:longint);
begin
if a<=min then
begin
use:=way;
min:=a;
end;
end;
procedure dfs(a:longint);
var i,j:longint;
begin
for i:=1 to 9 do
begin
case i of
1:begin zhuan(1,1);zhuan(1,2);zhuan(2,1);zhuan(2,2);end;
2:begin zhuan(1,1);zhuan(1,2);zhuan(1,3);end;
3:begin zhuan(1,2);zhuan(1,3);zhuan(2,2);zhuan(2,3);end;
4:begin zhuan(1,1);zhuan(2,1);zhuan(3,1);end;
5:begin zhuan(1,2);zhuan(2,1);zhuan(2,2);zhuan(2,3);zhuan(3,2);end;
6:begin zhuan(1,3);zhuan(2,3);zhuan(3,3);end;
7:begin zhuan(2,1);zhuan(2,2);zhuan(3,1);zhuan(3,2);end;
8:begin zhuan(3,1);zhuan(3,2);zhuan(3,3);end;
9:begin zhuan(2,2);zhuan(2,3);zhuan(3,2);zhuan(3,3);end;
end;
way[a]:=i;j:=i;
if can then print(a)
else dfs(a+1);
case j of
1:begin dao(1,1);dao(1,2);dao(2,1);dao(2,2);end;
2:begin dao(1,1);dao(1,2);dao(1,3);end;
3:begin dao(1,2);dao(1,3);dao(2,2);dao(2,3);end;
4:begin dao(1,1);dao(2,1);dao(3,1);end;
5:begin dao(1,2);dao(2,1);dao(2,2);dao(2,3);dao(3,2);end;
6:begin dao(1,3);dao(2,3);dao(3,3);end;
7:begin dao(2,1);dao(2,2);dao(3,1);dao(3,2);end;
8:begin dao(3,1);dao(3,2);dao(3,3);end;
9:begin dao(2,2);dao(2,3);dao(3,2);dao(3,3);end;
end;
end;
end;
begin
assign(input,'p1016.in');
assign(output,'p1016.out');
reset(input);
rewrite(output);
min:=99999;
for i:=1 to 3 do
for j:=1 to 3 do read(map[i,j]);
dfs(1);
for i:=1 to min do write(use[i],' ');
close(input);
close(output);
end.
2014年02月23日 07点02分