zoukankan      html  css  js  c++  java
  • H

    参考:

    1,Watchcow(poj 2230)

    2,POJ2230 Watchcow【欧拉回路】

    例题:

    H - Watchcow

     题意:给个无向图,求一条回路,经过每条边两次,每次不同向,求无向图每条边恰好经过两次,在回到原点,输出经过的顶点。

        容易转化为有向图欧拉回路每条边经过一次

    递归写法(此为求解回路的算法,判断回路是否存在请戳.........挖个坑)

    void dfs(int x)
    {
    	for(int i=0;i<G[x].size();i++)
    	{
    		if(!G[x][i].flag)
    		{
    			//	printf("%d
    ",G[x][i].v);
    			G[x][i].flag=1;
    			dfs(G[x][i].v);
    			//S.push(G[x][i].v);
    		}
    	}
    	ans[++ans1]=x;
    	//第一个执行++ans1的一定是递归的终点,
    	//也就是欧拉回路的终点(欧拉回路顺序不要紧) 
    }
    

    完整代码:

     1 /***********************************************/
     2     int n,m;
     3 stack<int>S;
     4 int ans[2*maxn];
     5 int ans1=0;
     6 struct node{
     7     int v;
     8     int flag;//路径是否被访问 
     9     node(int _v,int _flag):v(_v),flag(_flag){    }
    10 };
    11 vector<node>G[maxn];
    12 void dfs(int x)
    13 {
    14     for(int i=0;i<G[x].size();i++)
    15     {
    16         if(!G[x][i].flag)
    17         {
    18             //    printf("%d
    ",G[x][i].v);
    19             G[x][i].flag=1;
    20             dfs(G[x][i].v);
    21             //S.push(G[x][i].v);
    22         }
    23     }
    24     ans[++ans1]=x;
    25 }
    26 
    27 int main()
    28 {
    29 
    30     sc2(n,m);
    31     for(int i=1;i<=m;i++)
    32     {
    33         int a,b;
    34         sc2(a,b);
    35         G[a].push_back(node(b,0));
    36         G[b].push_back(node(a,0));
    37     }
    38     dfs(1);
    39     for(int i=1;i<=2*m+1;i++) printf("%d
    ",ans[i]);
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    sql去重复
    验证 decimal 和 数字
    OleDbConnection读取Excel
    排班知识点
    sql基础
    SQL Server 获取月份的具体天数
    2016 Excel 展示 Sqlserver数据并制作图表
    SQL Server跨域查询
    SqlSugar中CASE WHEN的用法
    Microsoft.AspNetCore.Mvc.Versioning学习笔记
  • 原文地址:https://www.cnblogs.com/liuyongliu/p/10321390.html
Copyright © 2011-2022 走看看