解いた.491byte.なげぇ.

http://okajima.air-nifty.com/b/2010/01/post-abc6.html

char t[1000][1000];d[1000][1000];i;j;a;f(i,j){--a&&(d[i-1][j]-a?d[i+1][j]-a?d[i
][j-1]-a?d[i][j+1]-a?:(t[i][++j]='$'):(t[i][--j]='$'):(t[++i][j]='$'):(t[--i][j
]='$'),f(i,j));}main(){for(;gets(t[i++]););for(;;a++)for(j=0;j<1e3;j++)for(i=0;
i<1e3;i++)if(a||(!a&&t[i][j]=='S'))if(d[i][j]==a){!a||t[i][j]==' '?d[i+1][j]||(
d[i+1][j]+=a+1),d[i-1][j]||(d[i-1][j]+=a+1),d[i][j+1]||(d[i][j+1]+=a+1),d[i][j-
1]||(d[i][j-1]+=a+1):d[i][j]=0;if(t[i][j]=='G')goto L;}L:f(i,j);for(i=0;t[i][0]
;i++)puts(t[i]);}

一応7行らしい.文字定数を普通の数字に直して,i,jをmainの引数に持っていけば7byteくらい短くなる.