首页 > 代码库 > 【BFS】bzoj2252 [2010Beijing wc]矩阵距离
【BFS】bzoj2252 [2010Beijing wc]矩阵距离
要注意一开始将所有为‘1‘的点入队,然后通过一次BFS去更新所有点的距离,直到无法更新为止。
1 #include<cstdio> 2 #include<queue> 3 #include<cstring> 4 using namespace std; 5 const int dx[]={0,0,-1,1},dy[]={1,-1,0,0}; 6 struct Point{int x,y;Point(const int &a,const int &b){x=a;y=b;}Point(){}}; 7 queue<Point>q; 8 int n,m,d[1000][1000],num; 9 char s[1000][1000],CH[20];10 inline void putint(int x)11 {12 num=0; 13 while(x>0){CH[++num]=x%10;x/=10;}14 while(num)putchar(CH[num--]+48);15 putchar(‘ ‘);16 }17 int main()18 {19 scanf("%d%d",&n,&m);20 memset(d,0x7f,sizeof(d));21 for(int i=0;i<n;i++)22 {23 scanf("%s",s[i]);24 for(int j=0;j<m;j++)25 if(s[i][j]==‘1‘)26 {27 d[i][j]=0;28 q.push(Point(i,j));29 }30 }31 while(!q.empty())32 {33 for(int i=0;i<4;i++)34 {35 int tx=dx[i]+q.front().x,ty=dy[i]+q.front().y;36 if(tx>=0&&tx<n&&ty>=0&&ty<m&&d[q.front().x][q.front().y]+1<d[tx][ty])37 {38 q.push(Point(tx,ty));39 d[tx][ty]=d[q.front().x][q.front().y]+1;40 }41 }42 q.pop();43 }44 for(int i=0;i<n;i++)45 {46 for(int j=0;j<m;j++)47 if(d[i][j])putint(d[i][j]);48 else {putchar(‘0‘);putchar(‘ ‘);}49 putchar(‘\n‘);50 }51 return 0;52 }
【BFS】bzoj2252 [2010Beijing wc]矩阵距离
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。