【宽搜】多多下棋
题目:多多下棋 rqnoj220
题目描述
【问题描述】
多多经常和叔叔下中国象棋,叔叔每次都赢,多多很不服气,今天她又找叔叔和他下象棋。。。。。。。。。
下到最后,多多只有一匹“马”可以用来进攻,而叔叔只有“将”,所有可以用来进攻和防御的棋子都被多多“吃” 了。(显然今天多多RP暴发)在一个给定的棋局下(将一定在棋盘第一行的中央),多多怎么走能在叔叔不移动“将”的情况下尽快赢了。
【数据范围】
棋盘是标准的中国象棋棋盘(10*9);
马的在象棋盘内;
【时限】
1S
注:在移动过程中“马”不能被“将”吃掉。(如果马走到(1,4),(1,6),(2,5))这三个点就被“将”吃掉了。
输入数据保证合理。
在象棋中马走日的规矩大家都知道吧!!
输入格式
只有一行,两个用空格隔开的数X Y。表示“马”在象棋盘中的位置
(X行Y列),规定“将”所在位置为1行中央,即:(1,5)点。
输出格式
只有一个数,多多要赢所走的最少的步数。(叔叔的“将”不移动位置)。
如果多无法赢了叔叔则输出“No Answer” (不包含“”号) 。
样例输入
样例输出
宽搜吧。。。应该不难
program rqnoj220;
const
dx:array[1..8] of longint=( 1, 1,-1,-1, 2, 2,-2,-2);
dy:array[1..8] of longint=( 2,-2, 2,-2, 1,-1, 1,-1);
type
tnode=record
x,y,step:longint;
end;
var
first,target:tnode;
l,r:longint;
q:array[0..10*9*10*9+100] of tnode;
h:array[0..20,0..20] of boolean;
procedure init;
begin
assign(input,'rqnoj220.in');
assign(output,'rqnoj220.out');
reset(input);
rewrite(output);
end;
procedure outit;
begin
close(input);
close(output);
halt;
end;
procedure readdata;
begin
read(first.x,first.y);
first.step:=-1;//入队后 +1 为 0
target.x:=1;
target.y:=5;
end;
function isok(x,y:longint):boolean;
begin
if ((x=1)and(y=4))and((x=1)and(y=6))and((x=2)and(y=5)) then exit(false);
exit(true);
end;
procedure inq(var x:tnode);
begin
inc(r);
inc(x.step);
h[x.x,x.y]:=true;
if (x.x=target.x)and(x.y=target.y) then
begin
writeln(x.step);
outit;
end;
q[r]:=x;
end;
function outq:tnode;
begin
inc(l);
exit(q[l]);
end;
procedure kuo(var node,newnode:tnode;i:longint);
begin
newnode:=node;
newnode.x:=newnode.x+dx[i];
newnode.y:=newnode.y+dy[i];
if not isok(newnode.x,newnode.y) then newnode:=node;
if (newnode.x<1)or(newnode.x>10)or(newnode.y<1)or(newnode.y>9) then newnode:=node;
end;
procedure main;
var
node,newnode:tnode;
i:longint;
begin
fillchar(h,sizeof(h),0);
inq(first);
while l<r do
begin
node:=outq;
for i:=1 to 8 do
begin
kuo(node,newnode,i);
if not h[newnode.x,newnode.y] then inq(newnode);
end;
end;
writeln('No Answer');
end;
begin
init;
readdata;
main;
outit;
end.

..... 转载请注明出处 ..... http://oijzh.cnblogs.com ..... by jiangzh
浙公网安备 33010602011771号