此題還是BFS的思想。
對每個為1的點進行BFS.
若BFS的值小於原來的,則進行替換。
這種題目注意格式問題了。。。
不要多個空格。。。。
#include <iostream><br />#include <queue><br />using namespace std;<br />#define X 200<br />#define Y 200</p><p>struct Point_Struct<br />{<br />int x;<br />int y;<br />int flag;<br />};</p><p>int BitMap[X+2][Y+2];</p><p>void BFS(int x,int y)<br />{<br />queue<Point_Struct> Queue;<br />Point_Struct Temp_Point,Temp_Point2;<br />int plusX[] = {0,1,0,-1};<br />int plusY[] = {1,0,-1,0};<br />int i;<br />Temp_Point.x = x;<br />Temp_Point.y = y;<br />Temp_Point.flag = 0;<br />Queue.push(Temp_Point);<br />while (!Queue.empty())<br />{<br />Temp_Point = Queue.front();<br />for (i = 0;i<4;i++)<br />{<br />if (BitMap[Temp_Point.x+plusX[i]][Temp_Point.y+plusY[i]]==-1||<br />BitMap[Temp_Point.x+plusX[i]][Temp_Point.y+plusY[i]]>Temp_Point.flag+1)<br />{<br />BitMap[Temp_Point.x+plusX[i]][Temp_Point.y+plusY[i]] = Temp_Point.flag+1;<br />Temp_Point2.x = Temp_Point.x+plusX[i];<br />Temp_Point2.y = Temp_Point.y+plusY[i];<br />Temp_Point2.flag = Temp_Point.flag+1;<br />Queue.push(Temp_Point2);<br />}<br />}<br />Queue.pop();<br />}<br />}</p><p>int main()<br />{<br />int x,y;<br />int i,j;<br />char str[Y+1];<br />while (scanf("%d%d", &x,&y)!=EOF)<br />{<br />memset(BitMap, 0, sizeof(BitMap));<br />for (i=0;i<=y+1;i++)<br />{<br />BitMap[0][i] = -2;<br />BitMap[x+1][i] = -2;<br />}<br />for (i=0;i<=x+1;i++)<br />{<br />BitMap[i][0] = -2;<br />BitMap[i][y+1] = -2;<br />}<br />for (i=1;i<=x;i++)<br />{<br />scanf("%s", str);<br />for (j=1;j<=y;j++)<br />BitMap[i][j] = str[j-1]-'0'-1;<br />}</p><p>for (i=1;i<=x;i++)<br />{<br />for (j=1;j<=y;j++)<br />if (BitMap[i][j] == 0)<br />BFS(i,j);<br />}</p><p>for (i=1;i<=x;i++)<br />{<br />for (j=1;j<y;j++)<br />printf("%d ", BitMap[i][j]);<br />printf("%d/n",BitMap[i][j]);<br />}<br />}<br />return 0;<br />}