主题:http://pj.org/Debug ID=1573
主要思想:棋盘上充满了N,E,S,W指令。人们按照棋盘的指示从北方的初始列开始移动,直到你下完棋或四处走动。
N意味着向北(向上)移动。
E意味着向东移动(右)。
S意味着向南移动(下)。
W意味着向西移动(左)。
分析:因为棋盘只有10*10,也就是说最多只有100步,所以您可以使用模拟算法。我们声明一个用于记录指令的字符卡映射,以及一个初始值为零的象棋卡,用于记录所走过的路径。国际象棋棋局或发现路径不是0。
代码如下:
其中包括LT;STDIO。HGT,包括LT;STDIO。包括:ELT;字符串。hgt; # define ONLINE void online () {### # #ifdef ONLINE ### ### else freopen (1573.in, r, stdin), freopen (1573.out, w, stdout); # #end if}const int LEN = 11; int r, c, s; char map {LEN} {LEN} {LEN}} {LEN}; int {LEN}} {path} {LEN} steps}, int int / / / /; simulation / loops / loops /; freopen(1573.in,r,stdin s{if(x lt;=)0x gt;r y lt;==0y gt;==0y gt;==0y gt;==0y gt;==0y gt;==0y gt;==0y gt;==0;c){step=s;.=.=path{x}{y}!= 0 {{steps = path {x} {y} {y} - 1; loops = s-steps; return;} path {x} {x} {y} {y}}}} = S + 1; if (map {x} {y}} = = N) {imitate (x-1, y, path {x} {x} {x} {x} {x} {x} {y} {x} {x} {y} {y} {y} {y} {y} {y}}} {y}}}}}}} else if (map {x} {y} = = W) {imitaTe (x, y-1, path {x} {x} {y}} {y}}}}); else if (map {x} {y} {y} ================================-1, path {x} {y}}}}}};}} // / / / / print void print print print () {{{{(if (loop s ============ - 1) {{printf (% D step (s) to exit prinn, before step s); else else else TF (% D step (% step (s) a) loop loop loop (% {scanf (% d% d% d n, r, c,If (r = = 0 C = = 0 C = = 0 s ==== = 0 s === = 0) {break; for (int I = 1; I lt; = = r; I + +) {for (int J = 1; J lt; = = c; j + + + {{{scanf (% c, map {i} {j}}}}});} // / / / end for J scanf (read (); return 0;} runThe resuLTS如下:
1573接受176K 0MS C+1414B 2011-0802 22:3630
原文地址:https://www.cnblogs.com/h5qipaiyuanma/p/9780323.html