欧拉图
来源:互联网 发布:java ocr文字识别 编辑:程序博客网 时间:2024/05/18 16:15
poj 2230[欧拉图]
欧拉图的求解十分简单,只需要进行一次dfs即可。
void dfs(int v)
{
for(int i=head[v];i!=-1;i=edge[i].next)
{
if(!edge[i].vis)
{
edge[i].vis=1;
dfs(edge[i].to);
}
}
printf("%d\n",v);
}
以上代码按逆序输出欧拉回路中访问的点
void dfs(int v)
{
for(int i=head[v];i!=-1;i=edge[i].next)
{
if(!edge[i].vis)
{
edge[i].vis=1;
dfs(edge[i].to);
printf("%d\n",i);
}
}
}
逆序输出访问的边
poj2438【哈密顿回路算法】
算法的主要思想就是扩展点,知道找到,其中用到数组的反转
末班题,#include<iostream>
#include<fstream>
#include<set>
#include<stack>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
typedef long long LL;
const int mx=200;
bool map[mx*3][mx*3];
int ans[mx*3];
bool visit[mx*3];
int n,m;
void init()
{
memset(visit,0,sizeof(visit));
memset(ans,0,sizeof(ans));
for(int i=1;i<=n*2;i++)
for(int j=1;j<=n*2;j++)
if(i==j) map[i][j]=0;
else map[i][j]=1;
}
void reverse(int ans[],int s,int t)
{
while(s<t)
{
int temp=ans[s];ans[s]=ans[t];ans[t]=temp;
s++;
t--;
}
}
void Hamilton()
{
int s=1,t;
int i,j;
int w;
for(i=1;i<=n*2;i++)
if(map[s][i]) break;
t=i;
visit[s]=visit[t]=1;
ans[0]=s,ans[1]=t;
int ansi=2;
while(1)
{
while(1)
{
for(i=1;i<=n*2;i++)
{
if(map[t][i]&&!visit[i])
{
ans[ansi++]=i;
visit[i]=1;
t=i;
break;
}
}
if(i>n*2) break;
}
w=ansi-1,i=0; reverse(ans,i,w);
int temp=s;s=t;t=temp;
while(1)
{
for(i=1;i<=n*2;i++)
{
if(map[t][i]&&!visit[i])
{
ans[ansi++]=i;
visit[i]=1;
t=i;
break;
}
}
if(i>n*2) break;
}
if(!map[s][t])
{
for(i=1;i<ansi-2;i++)
if(map[ans[i]][t]&&map[s][ans[i+1]])
break;
w=ansi-1;
i++;
t=ans[i];
reverse(ans,i,w);
}
if(ansi==n*2) return ;
for(j=1;j<=n*2;j++)
{
if(visit[j]) continue;
for(i=1;i<ansi-2;i++)
if(map[ans[i]][j])
break;
if(map[ans[i]][j])
break;
}
s=ans[i-1];
t=j;
reverse(ans,0,i-1);
reverse(ans,i,ansi-1);
ans[ansi++]=j;
visit[j]=1;
}
}
int main( )
{
//freopen("in.txt","r",stdin);
while(scanf("%d %d",&n,&m),m||n)
{
init();
for(int i=1;i<=m;i++)
{
int a,b;
scanf("%d %d",&a,&b);
map[a][b]=map[b][a]=0;
}
Hamilton();
printf("%d",ans[0]);
for(int i=1;i<n*2;i++)
printf(" %d",ans[i]);
printf("\n");
}
return 0;
}
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 欧拉图
- 在桌面创建IE风格的快捷方式(无小箭头)
- OSI七层协议模型和TCP/IP四层模型比较
- 第一次作业
- Atom飞行手册翻译: 3.6 图标
- java编码规范总结之 checkStyle6.8安装总结
- 欧拉图
- transition-timing-function
- 2015/08/05
- 解决visual stidio 在调试的时候加载错误的问题
- Map接口之Hashtable、HashMap、LinkedHashMap、TreeMap、WeakHashMap等
- srs之rtmp
- vs2005 调试基础
- OC4J Web容器
- 黑马程序员_Java基础:序列化(Serializable)与反序列化