您的位置:首页 > 教育 > 培训 > 百度城市服务小程序_开源建站系统cms_江阴企业网站制作_我要安装百度

百度城市服务小程序_开源建站系统cms_江阴企业网站制作_我要安装百度

2025/5/16 10:54:00 来源:https://blog.csdn.net/qq_74924951/article/details/142696515  浏览:    关键词:百度城市服务小程序_开源建站系统cms_江阴企业网站制作_我要安装百度
百度城市服务小程序_开源建站系统cms_江阴企业网站制作_我要安装百度

105. 有向图的完全可达性

这道题属于简单搜索题,采用bfs即可,也可用dfs但注意要回溯

1、条件准备

graph数组存图,visit数组判断结点是否走过。
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
#define endl '\n'bool graph[105][105];
bool visit[105];int n,k;

2、主函数

先存图,建边。然后bfs
再遍历一下结点是否都走过,有没走过输出-1,否则输出1
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>k;rep(i,1,k){int a,b;cin>>a>>b;graph[a][b]=1;}bfs(); rep(i,1,n){if(!visit[i]){cout<<"-1";return 0;}}cout<<"1";return 0;
}

3、bfs函数

还是用数组模拟队列,把1放进去。
取队头,遍历该点有无边,并且还没走过,有就加入队列。
void bfs()
{int q[105];int tt=-1,hh=0;q[++tt]=1;visit[1]=1;while(hh<=tt){int cur=q[hh++];rep(i,1,n){if(graph[cur][i]&&!visit[i]){q[++tt]=i;visit[i]=1;}}}
}

4、总结

简单搜索题
完整代码如下:
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; i++)
using namespace std;
#define endl '\n'bool graph[105][105];
bool visit[105];int n,k;void bfs()
{int q[105];int tt=-1,hh=0;q[++tt]=1;visit[1]=1;while(hh<=tt){int cur=q[hh++];rep(i,1,n){if(graph[cur][i]&&!visit[i]){q[++tt]=i;visit[i]=1;}}}
}
int main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>k;rep(i,1,k){int a,b;cin>>a>>b;graph[a][b]=1;}bfs(); rep(i,1,n){if(!visit[i]){cout<<"-1";return 0;}}cout<<"1";return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com