#include<stdio.h>
#include<stdlib.h>
#define MAXV 1000 /最大顶点数设为1000/
typedef struct { /定义结构体类型/
int Visited[MAXV]; /顶点标记/
int Edges[MAXV][MAXV]; /邻接矩阵数组/
int VertexN,EdgeN; /顶点和边数/
}Graph; /用邻接矩阵存储的图结构体/
void InitializeG(Graph*G)
{ /图的初始化/
int i,j;
for(i=0;i<MAXV;i++)
{
for(j=0;j<MAXV;j++)
G->Edges[i][j]=0;
G->Visited[i]=0;
}
G->VertexN=G->EdgeN=0;
}
void ReadG(Graph*G) /读入并存储一个图/
{
int i,V1,V2;
scanf("%d%d",&G->VertexN,&G->EdgeN); /用户输入顶点数和边数/
for(i=0;iEdgeN;i++)
{
scanf("%d%d",&V1,&V2); /输入顶点名称,比坐标大1(1到N)/
G->Edges[V1-1][V2-1]=G->Edges[V2-1][V1-1]=1;
}
}
void DFS(Graph*G,int V)
{ /图G的深度优先搜索/
int W;
G->Visited[V]=1; /将访问到的结点进行标记/
for(W=0;WVertexN;W++)
if (G->Edges[V][W]&&!G->Visited[W])
DFS(G,W);
}
int CheckG(Graph*G)
{ /检查边的度是否全为偶数/
int r,i,j;
for(i=0;iVertexN;i++)
{
r=0;
for(j=0;jVertexN;j++)
r+=G->Edges[i][j];
if (r%2) return 0; /发现奇数度的边则返回0/
}
return 1; /全是偶数度的边则返回1/
}
int main()
{
int i;
GraphG=(Graph)malloc(sizeof(Graph));
?
return 0;
}
注:(1)
输入说明:输入的第1行包含两个正整数,分别为结点数N(1<N<1000)和
边数M。随后的M行对应M条边,每行给出一对正整数,分别是该条边连
通的两个结点的编号(结点从1到N编号)。
(2)
输出说明:若欧拉回路存在则输出1,否则输出0。
(3)
测试实例:
1)输入:
6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6
输出:1
(说明:存在欧拉回路)
2)输入:
5 8
1 2
1 3
2 3
2 4
2 5
5 3
5 4
3 4
输出:0
(说明:不存在欧拉回路)