现在的位置: 首页 > 综合 > 正文

欧拉回路

2012年11月30日 ⁄ 综合 ⁄ 共 483字 ⁄ 字号 评论关闭

欧拉图(欧拉通路,欧拉回路)

给你一副无向图。 寻找一条包含所有边的路径,其中每一条边只经过一次。这被叫做欧拉通路
若这条路径的起点与终点为同一点,则为欧拉回路

判定定理
定理1:一个图有欧拉回路当且仅当它是连通的(即不包括0度的结点)且每个结点都有偶数度。
定理2:一个图有欧拉通路当且仅当它是连通的且除两个结点为基数度,其他结点都有偶数度。
       其中的两个基数度结点分别为起点和终点。

int map[MAXN][MAXN]; //map[i,j]表示i,j之间的边的条数
int deg[MAXN];       //记录结点的度

/*  递归实现 */
void DFS(int s)
{
    int i;
    for (i=1; i<=500; i++)
        if (map[s][i])
        {
            map[s][i]--;
            map[i][s]--;
            DFS(i);
        }
    ans[num++] = s;
}
int main()
{
    for (k=0; k<n; k++)
    {
        scanf("%d %d", &i, &j);
        map[i][j]++;
        map[j][i]++;
        deg[i]++;
        deg[j]++;
    }
    DFS(start);
	//最后把ans[]逆序输出即为路径顺序。
}

抱歉!评论已关闭.