内容
编程随机生成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