邯郸网站建设taigew做微信的网站叫什么
邯郸网站建设taigew,做微信的网站叫什么,整站seo排名公司,网站建设一条龙全包seo关于多源BFS#xff0c;基本上就是单源BFS的简单升级了一下#xff0c;比如在queue中队头开始时只有一个#xff0c;我们通过这一个队头去推导其他的东西。而多源最短路就是队头一开始有1-n个可能的数#xff0c;一个一个去BFS。 题目思路#xff1a; 这个题就直接把所有的… 关于多源BFS基本上就是单源BFS的简单升级了一下比如在queue中队头开始时只有一个我们通过这一个队头去推导其他的东西。而多源最短路就是队头一开始有1-n个可能的数一个一个去BFS。 题目思路 这个题就直接把所有的1统计出来放进queue中每次取出对头进行BFS即可其中有两个问题 1.我们BFS如何去找到他是0点怎么通过0传递到下一个0。 2.如何保证他是最小值会不会出现值覆盖的现象。 其实第一个问题我们可以直接用dist数组进行标记一旦有0被靠近的1标记了那么他自身我们就可以看作是个1通过这个1我们再去找到下一个0。 第二个问题不会出现覆盖因为我们每次赋值之后dist就会变成附近1的dist值加1dist-1我们初始默认0的dist数组值为-1我们每次都是取最近的所以一旦到这个地方其他的点就无法访问了一旦访问便是最近距离。 千万别忘了判断数组是否越界否则会导致段错误 #includebits/stdc.h
using namespace std;
char g[1010][1010];
int n,m;
int dist[1010][1010];
typedef pairint,int PII;
int dx[4]{1,0,-1,0};
int dy[4]{0,-1,0,1};
void bfs()
{memset(dist,-1,sizeof(dist));queuePII q;for(int i1;in;i){for(int j1;jm;j){if(g[i][j]1){q.push({i,j});dist[i][j]0;}}}while(q.size()){auto tq.front();q.pop();for(int i0;i4;i){int xt.firstdx[i];int yt.seconddy[i];if(x1||xn||y1||ym)continue;if(dist[x][y]!-1){continue;}else{dist[x][y]dist[t.first][t.second]1;q.push({x,y});}}}
}
int main()
{cinnm;for(int i1;in;i){for(int j1;jm;j){cing[i][j];}}bfs();for(int i1;in;i){for(int j1;jm;j){coutdist[i][j] ;}coutendl;}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/86935.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!