所设计的程序能够通过编译,并能够实现从给定10个结点的图G的邻接矩阵A, 判断G是否存在欧拉回路,存在则输出True,否则输出False。
输入格式
首先输入图G的种类,无向图:输入1,有向图:输入2;然后输入图G的邻接矩阵A。
输出格式
输出True表示存在欧拉回路,False表示不存在欧拉回路。
判断图是否存在欧拉回路
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 神仙别闹 2021-12-27 12:23关注
#include <iostream> #include <vector> using namespace std; int n; void dfs(int start,vector <vector <int> > &juzhen,vector <int> &vis) { vis[start]=1; for(int j=1;j<=n;j++) { if(vis[j]==0&&juzhen[start][j]!=0) {//如果节点没有被访问过,并且两点之间存在边 dfs(j,juzhen,vis); } } } int main() { int m,x,y,num=0; cout<<"请输入节点个数:"; cin>>n; cout<<"请输入边的个数:"; cin>>m; vector <vector <int> > juzhen(n+1,vector <int> (n+1,0)); vector <int> vis(n+1,0); for(int i=1;i<=m;i++) { cin>>x>>y; juzhen[x][y]=juzhen[y][x]=1; } dfs(1,juzhen,vis); for(int i=1;i<=n;i++) { if(vis[i]==0) {//说明该图不是连通图,所以直接输出0返回 cout<<0<<endl; return 0; } } for(int i=1;i<=n;i++) { num=0;//num用来判断每个节点的度是否为偶数 for(int j=1;j<=n;j++) { if(juzhen[i][j]==1) num++; } if(num%2!=0) {//不是偶数,就输出0返回 cout<<0<<endl; return 0; } } cout<<1<<endl; return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 11