约 10 分钟
BFS 用队列实现,并用 vis[] 标记访问过的点防止重复。起点入队,然后不断取队首、把它未访问的邻居入队:q.push(s); vis[s]=1; while(!q.empty()){ int u=q.front(); q.pop(); for(int v:g[u]) if(!vis[v]){ vis[v]=1; dis[v]=dis[u]+1; q.push(v);} }。第一次到达某点时的层数就是最短步数。
vis[]
q.push(s); vis[s]=1; while(!q.empty()){ int u=q.front(); q.pop(); for(int v:g[u]) if(!vis[v]){ vis[v]=1; dis[v]=dis[u]+1; q.push(v);} }
为什么第一次到达某点就是最短步数?
登录 后可看答案