質問: (402, 985), (398, 27) print bfs(start, end, image2d, [])
回答: ツリー検索が多すぎます。迷路は、ソリューションパスに沿って本質的に分離可能です。(これを指摘してくれたredditの rainman002 に感謝します。)このため、 connected components を使用して、迷路の壁の接続されたセクションを識別することができます。これは、ピクセルを2回繰り返します。これをソリューションパスのニースダイアグラムに変換する場合は、構造化要素を使用したバイナリ演算を使用して、接続された各領域の「行き止まり」経路を埋めることができます。matlabのデモコードは次のとおりです。微調整を使用して、結果をより適切にクリーンアップし、より一般化して、実行速度を上げることができます。 (午前2時30分でない場合もあります。)% read in and invert the image im = 255 - imread('maze.jpg'); % sharpen it to address small fuzzy channels % threshold to binary 15% % run connected components result = bwlabel(im2bw(imfilter(im,fspecial('unsharp')),0.15)); % purge small components (e.g. letters) for i = 1:max(reshape(result,1,1002*800)) [count,~] = size(find(result==i)); if count < 500 result(result==i) = 0; end end % close dead-end channels closed = zeros(1002,800); for i = 1:max(reshape(result,1,1002*800)) k = zeros(1002,800); k(result==i) = 1; k = imclose(k,strel('square',8)); closed(k==1) = i; end % do output out = 255 - im; for x = 1:1002 for y = 1:800 if closed(x,y) == 0 out(x,y,:) = 0; end end end imshow(out);