■
某人材獲得がどーのこーの問題。
b.py
# -*- coding: utf-8 -*- import sys m = [list(line[:-1]) for line in sys.stdin] q = [] for i in range(len(m)): for j in range(len(m[i])): if m[i][j] == 'S': q.append((i, j, [(i, j)])) break i = j = path = '' visited = [] while q: i, j, path = q.pop(0) if m[i][j] == 'G': break else: for y, x in ((i-1, j), (i+1, j), (i, j-1), (i, j+1)): if not (y, x) in visited and m[y][x] in (' ', 'G'): visited.append((y, x)) q.append((y, x, path+[(y, x)])) for i, j in path: if not m[i][j] in ('S', 'G'): m[i][j] = '$' print '\n'.join([''.join(L) for L in m])
map.dat
************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********************** * * G * * * *********** * * * * ******* * * * * * **************************
実行、結果
$ python b.py < map.dat ************************** *S* *$$$$ * *$* *$ *$ ************* * *$*$$$* $ ************ * *$$$ * $$$$$$$ * **************$*********** * $$$$$$$$$$$$$ * **$*********************** * $$$ *$$$$$$$$$$$$$$G * * *$$$$$ *********** * * * * ******* * * * * * **************************
「こんなもん幅優先探索するだけだし、10分もあれば書けるだろ……」とか思ってやってみたものの、なんだかんだで30分近くかかったので死にたいですね。