一笔画问题算法

一笔画问题,属于图问题里面,我觉得主要用dfs算法。


一笔画问题,是欧拉做了一个定理,叫欧拉路/欧拉回路。怎么说呢,是要统计一个度。

给一张图——

image图——一笔画

这几个点的度,从上到下,从左到右,分别是:2、4、4、2、3、3、2。

这个时候,我们对这么几个度分分类,分为奇数,偶数,即点叫做奇点、偶点。

所以嘛,这两个度是3的点是奇点,一共有两个奇点。

欧拉路和欧拉回路是这么定义的:

当奇点个数为2个时,构成欧拉路;当奇点个数为0个时,构成欧拉回路;当奇点个数为4、6……时,不构成一笔画。(没有1个奇点)

这个时候呢,要看路线了。

当是欧拉路时,要从任意一个奇点开始,进行dfs;当是欧拉回路时,只随便找一个点,进行dfs,最终终点会是起点。


所以关键的代码是:

void dfs(int k)

{

  for(int i=1; i<=n; i++)

  {

    if(b[i][k])

    {

      b[i][k]=false;

      b[k][i]=false;

      dfs(i);//尝试

    }

  }

  go[++tot]=k;//记录

}

int main()

{

  for(int i=1; i<=n; i++)

  {

    if(totn[i]%2)

    {

      sum++;

      if(sum==1) start=i;

    }//取起点

  }

  dfs(start);//dfs

  return 0;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。