#include <stdio.h>
#include <string.h>
struct stack {int top , node[210];} f; //顶点的堆栈
int a[201][201]; //图的邻接矩阵
int n;
void dfs(int x) //图的深度优先遍历
{
int i;
f.top ++; f.node[f.top] = x;
for (i = 1; i <= n; i ++)
if (a[i][x] > 0)
{
a[i][x] = 0; a[x][i] = 0; //删除此边 dfs(i);
break;
}
}
void Euler(int x) //欧拉回路算法
{
int i , b;
f.top = 0;
f.node[f.top] = x; //入栈
while (f.top >= 0)
{
b = 0;
for (i = 1; i <= n; i ++)
if (a[f.node[f.top]][i] > 0)
{
b = 1;
break;
}
if (b == 0) //如果没有点可以扩展,输出并出栈 {
printf("%d " , f.node[f.top]);
f.top --;
}
else
{
f.top --;
dfs(f.node[f.top+1]);
} //如果有,就DFS
}