资源简介

随机创建欧拉图+找寻欧拉回路,文档齐全,注释齐全易懂

资源截图

代码片段和文件信息

// eulargraph.cpp : Defines the entry point for the console application.
//

#include “stdafx.h“
#include “stdio.h“
#include “stdlib.h“
#include “time.h“
#include “malloc.h“
//#include “stdbool.h“
#define n 204
int count;
//int m=0;
//int circuit[m];
int g[n+1][n+1];//用来存储节点之间关系的矩阵
int edgecount[n+1];//存储每个节点的度数
int random() //用来随机节点之间关系 0表示不相连,1表示相连
{
int k;
    
//    printf(“Ten random numbers from 0 to 99nn\n“);
    k=rand()%2;
    return k;
}
int randomNode()//用来随机节点
{
int k;
    
//    printf(“Ten random numbers from 0 to 99nn\n“);
    k=rand()%n+1;
    return k;
}
void adjacencyCount()//计算每一个节点邻接边的个数
{
int ij;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
edgecount[i]+=g[i][j];
}
void initGraph()//随机生成一个连通图,然后再生成欧拉图
{
int ij;
int s;
for(i=1;i<=n;i++)//先构造一个图
{
g[i][i]=0;
for(j=i+1;j<=n;j++)
{
s=random();
g[i][j]=g[j][i]=s;
}
}
adjacencyCount();
for(i=1;i<=n;i++)//把图变成连通图
{
if(edgecount[i]==0)
{
s=i;
while(s==i)
 s=randomNode();//随机图中的节点    并相连
g[i][s] = g[s][i] = 1;
edgecount[i]++;
edgecount[s]++;
}
// adjacencyCount();
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
printf(“%d---->%d : %d\n“ijg[i][j]);
}
/*
以下为构造的欧拉图
如果该点v1的度数为奇数,则在后面再找一个度数为奇数的点v2
(一)如果v1和v2相连,而且如果他们的度数都大于1,则去掉他们的连边,否则继续寻找度数为奇数的节点
     如果v1和v2没有相连,则相连v1和v2
(二)如果 (一) 失败了,既没有找到合适的点
      1、则再找一度数为奇的点v3,和一个度数为偶的点v4,如果v4
        和v1,v3没有相连,则在v4和v1,v4和v3之间加边。
      2、(1)如果仍没有找到,则将该点与任意不相连的节点之间加边,重新执行变偶操作
     (2)如果找不到与该点不相连的节点,在任意找度数大于2的节点,去掉他们的连边
*/
void eularGraph()//
{

int ijklm;
int v;//浪费了一部分空间
int retry = 0;
for(i=1;i<=n;i++)
{
printf(“%d%d\n“iedgecount[i]);
if(edgecount[i]%2!=0)//判断该点的度数是否为偶数
{
j=1;
for(j=i+1;j<=n;j++)//在相邻的节点中寻找度数为奇数的节点
{
if(edgecount[j]%2!=0)//从相邻的节点中找出度数为奇数的节点  (一)
{
if(g[i][j]) //节点之间是否存在边,不存在则连接这两个节点
{
if(edgecount[i]!=1&&edgecount[j]!=1)//判断i和j的节点的度数是否大于1,大于1则去掉邻边
{
g[i][j]=g[j][i]=0;
edgecount[i]--;
edgecount[j]--;
break;
}
else
{
continue;
}
}
else //不相连则连上
{
g[i][j] = g[j][i] =1;
edgecount[i]++;
edgecount[j]++;
break;
}
}
}
if(j>n)   //没有找到合适的邻接点 (二)
{
// m = 0;
for(k=i+1;k<=n;k++)       //(二) 1、则再找一度数为奇的点v3,1、和一个度数为偶的点v4,如果v4
                                          // 和v1,v3没有相连,则在v4和v1,v4和v3之间加边。
{
if(edgecount[k]%2!=0)
{
v=k;
// m++;
break;
}
}


// l=0;
// while(l // {
for(k=1;k<=i;k++)//这个地方 (二) 1、
{
if(edgecount[k]%2==0)
{
if(!g[i][k]&&!g[k][v])
{
g[i][k] = g[k][i] = 1;
g[k][v] = g[v][k]=1;
edgecount[i]++;
edgecount[k]+=2;
edgecount[v]++;
// l=m;
break;
}
}
}
// l++;
// }


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-10-15 14:14  欧拉图问题\
     文件        6052  2010-10-12 17:21  欧拉图问题\eular.cpp
     文件        3603  2010-10-12 15:06  欧拉图问题\eular.cpp.bak
     目录           0  2010-10-14 16:47  欧拉图问题\eulargraph\
     目录           0  2010-10-13 16:06  欧拉图问题\eulargraph\Debug\
     文件      188516  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\eulargraph.exe
     文件      212000  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\eulargraph.ilk
     文件       14093  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\eulargraph.obj
     文件      203788  2010-10-09 15:23  欧拉图问题\eulargraph\Debug\eulargraph.pch
     文件      476160  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\eulargraph.pdb
     文件        2311  2010-10-09 15:23  欧拉图问题\eulargraph\Debug\StdAfx.obj
     文件       41984  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\vc60.idb
     文件       53248  2010-10-13 15:56  欧拉图问题\eulargraph\Debug\vc60.pdb
     文件        6939  2010-10-13 15:56  欧拉图问题\eulargraph\eulargraph.cpp
     文件        4584  2010-10-09 14:27  欧拉图问题\eulargraph\eulargraph.dsp
     文件         528  2010-10-09 14:27  欧拉图问题\eulargraph\eulargraph.dsw
     文件       50176  2010-10-14 16:47  欧拉图问题\eulargraph\eulargraph.ncb
     文件       48640  2010-10-14 16:47  欧拉图问题\eulargraph\eulargraph.opt
     文件        1778  2010-10-13 15:56  欧拉图问题\eulargraph\eulargraph.plg
     文件        1232  2010-10-09 14:27  欧拉图问题\eulargraph\ReadMe.txt
     文件         297  2010-10-09 14:27  欧拉图问题\eulargraph\StdAfx.cpp
     文件         769  2010-10-09 14:27  欧拉图问题\eulargraph\StdAfx.h
     文件       23552  2010-10-09 10:48  欧拉图问题\欧拉回路.doc
     文件       27136  2010-10-09 11:02  欧拉图问题\欧拉回路C++.doc
     文件       61952  2010-10-09 11:00  欧拉图问题\随机建立欧拉图.doc

评论

共有 条评论