离散实验(图的随机生成及欧拉路的确定)

本文介绍如何编程生成随机无向图,并进行欧拉图与半欧拉图的判断。当图符合条件时,展示至少一条欧拉回路或欧拉路。文章描述了从不同奇数度节点出发的遍历方法,解决了之前遍历中的问题,实现了欧拉路径的正确判定。
摘要由CSDN通过智能技术生成

内容

编程随机生成n个结点的无向图并能进行(半)欧拉图的判定,若是则给出欧拉(回)路。

要求:

对给定n个结点,随机生成邻接矩阵以确定某无向简单图并进行欧拉图和半欧拉图的判定,若符合则给出至少一条欧拉回路或欧拉路。

#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
//创建随机无向图的邻接矩阵
void Creat(int **a,int n)
{
    srand(unsigned(time(NULL)));
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++)
            a[i][j]=0;
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++)
            a[i][j]=rand()%2;  //上三角生成随机0,1随机数组
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++)  //因为是无向图
            a[j][i]=a[i][j];    //对上三角作对称
    }
    cout<<"随机生成的邻接矩阵为:"<<endl;
    cout<<"  ";
    for(int i=0;i<n;i++)
        cout<<i<<"  ";
    cout<<endl;
    cout<<"  ";
    for(int i=0;i<n;i++)
        cout<<"___";
    cout<<endl;
    for(int i=0;i<n;i++){//输出邻接矩阵
        cout<<i<<"|";
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<"  ";
        cout<<endl<<" |"<<endl;
    }
}
//删除一条边
void Delete(int u,int v,int **a,int n)
{
    if(u<0||v<0||u>n-1||v>n-1||u==v||a[u][v]==0){
        cout<<"删除失败!"<<endl;
        return ;
    }
    a[u][v]=a[v][u]=0;
}
//判断一条边是否存在
bool Exist(int u,int v,int **a,int n)
{
    if(u<0||v<0||u>n-1||v>n-1||u==v||a[u][v]==0)return false;
	return true;
}
//利用深度优先遍历
void DFS(int v,bool *visited,int **a,int n)
{
    visited[v]=true;
    for(int u=0;u<n;u++)
        if(Exist(v,u,a,n)&&!visited[u]) DFS(u,visited,a,n);
}

//判断是否连通
bool Con(int **a,int
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值