bfs欧拉回路
#include<stdio.h>
#include<memory.h>
#define N 1<<16
int fac[20],n,ans[N],num,K,t;
bool used[N][2];
void DFS(int x)
{
for(int i=0;i<2;i++)
if(!used[x][i])
{
used[x][i]=true;
DFS(((x<<1)+i)%fac[n-1]);
ans[num++]=i;
}
}
int main()
{
int i,j;
fac[0]=1;
for(i=1;i<16;i++)
fac[i]=fac[i-1]*2;
while(scanf("%d %d",&n,&K),n)
{
memset(ans,0,sizeof(ans));
memset(used,false,sizeof(used));
num=t=0;
DFS(0);
num+=n-2-K;
for(i=0;i<n;i++)
t=(t<<1)+ans[num-i];
printf("%d\n",t);
}
return 0;
}
本文介绍了一种使用深度优先搜索(DFS)实现的BFS欧拉回路算法,并提供了一个具体的C语言代码示例。该算法适用于寻找图中的欧拉路径,通过递归地探索所有边来构造欧拉回路。
313

被折叠的 条评论
为什么被折叠?



