hiho一下 第五十周(欧拉路径)50

/////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:tt267 声明:本文遵循以下协议自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 查看本文更新与讨论请点击: ///////////////////////////////////////////////////////////////////////////////////////////////////////

比赛链接: 题目链接: (比赛过期后可用)

题目里的提示解释的很清楚了,就是伪代码略坑。。 注意重边的问题,WA了我好几次

;LL;const int INF = 99999999;PI = acos(0.0) * 2.0;<int>S;int edge[N][N];int n,m;bool flag = true;void Fleury(int start);void dfs(int x);int main(){int u,v;memset(edge,0,sizeof(edge));scanf(“%d%d”,&n,&m);for(int i=0; i<m; i++){scanf(“%d%d”,&u,&v);edge[u][v]++;edge[v][u]++; //记录边的个数,可能有重边}int start=1;for(int i=1; i<=n; i++)//判断欧拉回路的起点{int degree=0;for(int j=1; j<=n; j++)degree+=edge[i][j];if(degree&1){start=i;break; //取第一个就可以了}}Fleury(start);return 0;}void Fleury(int u){S.push(u);while(!S.empty()){bool bridge = false;for(int i=1; i<=n; i++)//判断一下是否有支路,就是判断下有木有桥{if(edge[S.top()][i]>0){bridge=true;break;}}if(bridge){int v=S.top();S.pop();dfs(v); //如果有,,就dfs}else{if(flag)//使输出尾部没有空格{printf(“%d”,S.top());flag = false;}elseprintf(” %d”,S.top());S.pop();}}puts(“”);}void dfs(int u){S.push(u);for(int v=1; v<=n; v++){if(edge[u][v]>0){edge[u][v]–;//删除此边edge[v][u]–;dfs(v);break;}}}

生命中,每一种苦难的背后都有一片晴朗的天空

hiho一下 第五十周(欧拉路径)50

相关文章:

你感兴趣的文章:

标签云: