http://poj.org/problem?id=2438

题意:

有2*N个人要坐在一张圆桌上吃饭,有的人之间存在敌对关系,安排一个座位次序,使得敌对的人不相邻.

假设每个人最多有N-1个敌人.如果没有输出"No solution!".

如果i和j可以相邻,之间连一条边

每个人最多有N-1个敌人,所以每个人至少会连出去N+1条边

根据狄拉克定理,图一定是哈密顿图

所以本题不存在无解的情况

然后输出一条哈密顿回路就好了

有关哈密顿图与哈密顿回路的问题 参见文章

http://www.cnblogs.com/TheRoadToTheGold/p/8439160.html

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; #define N 401 int n,m; bool e[N][N]; int cnt,s,t;
bool vis[N];
int ans[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void Reverse(int i,int j)
{
while(i<j) swap(ans[i++],ans[j--]);
} void expand()
{
while()
{
int i;
for(i=;i<=n;++i)
if(e[t][i] && !vis[i])
{
ans[++cnt]=t=i;
vis[i]=true;
break;
}
if(i>n) return;
}
} void Hamilton()
{
memset(vis,false,sizeof(vis));
cnt=;
s=;
for(t=;t<=n;++t)
if(e[s][t]) break;
vis[s]=vis[t]=true;
cnt=;
ans[]=s;
ans[]=t;
while()
{
expand();
Reverse(,cnt);
swap(s,t);
expand();
if(!e[s][t])
{
int i;
for(i=;i<cnt;++i)
if(e[ans[i]][t] && e[s][ans[i+]]) break;
t=ans[i+];
Reverse(i+,cnt);
}
if(cnt==n) break;
int j,i;
for(j=;j<=n;++j)
if(!vis[j])
{
for(i=;i<cnt;++i)
if(e[ans[i]][j]) break;
if(e[ans[i]][j]) break;
}
s=ans[i-];
t=j;
Reverse(,i-);
Reverse(i,cnt);
ans[++cnt]=j;
vis[j]=true;
}
for(int i=;i<cnt;++i) printf("%d ",ans[i]);
printf("%d\n",ans[cnt]);
} int main()
{
int u,v;
while()
{
read(n); read(m);
if(!n) return ;
memset(e,true,sizeof(e));
n<<=;
while(m--)
{
read(u); read(v);
e[u][v]=e[v][u]=false;
}
for(int i=;i<=n;++i) e[i][i]=false;
Hamilton();
}
}
Children's Dining
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4672   Accepted: 734   Special Judge

Description

Usually children in kindergarten like to quarrel with each other. This situation annoys the child-care women. For instant, when diner time comes, a fierce conflict may break out when a certain couple of children sitting side by side who are hostile with each other. Although there aren't too many children dining at the same round table, but the relationship of "enemy" or "friend" may be very complex. The child-care women do come across a big problem. Now it is time for you to help them to figure out a proper arrangement of sitting, with which no two "enemy" children is adjacent.

Now we assume that there are 2 * n children who sit around a big table, and that none has more than n - 1 "enemies".

Input

The input is consisted of several test blocks. For each block, the first line contains two integers n and m (1 <= n <= 200, 0 <= m <= n (n - 1)). We use positive integers from 1 to 2 * n to label the children dining round table. Then m lines followed. Each contains positive integers i and j ( i is not equal to j, 1 <= i, j <= 2 * n), which indicate that child i and child j consider each other as "enemy". In a input block, a same relationship isn't given more than once, which means that if "i j" has been given, "j i" will not be given.

There will be a blank line between input blocks. And m = n = 0 indicates the end of input and this case shouldn't be processed.

Output

For each test block, if the proper arrangement exist, you should print a line with a proper one; otherwise, print a line with "No solution!".

Sample Input

1 0

2 2
1 2
3 4 3 6
1 2
1 3
2 4
3 5
4 6
5 6 4 12
1 2
1 3
1 4
2 5
2 6
3 7
3 8
4 8
4 7
5 6
5 7
6 8 0 0

Sample Output

1 2
4 2 3 1
1 6 3 2 5 4
1 6 7 2 3 4 5 8

poj 2438 Children's Dining的更多相关文章

  1. POJ 2438 Children’s Dining (哈密顿图模板题之巧妙建反图 )

    题目链接 Description Usually children in kindergarten like to quarrel with each other. This situation an ...

  2. POJ 2438 Children's Dining(哈密顿回路)

    题目链接:http://poj.org/problem?id=2438 本文链接:http://www.cnblogs.com/Ash-ly/p/5452615.html 题意: 有2*N个小朋友要坐 ...

  3. POJ 2438 哈密顿回路

    Children's Dining Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4730   Accepted: 754 ...

  4. POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE

    POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...

  5. poj 3083 Children of the Candy Corn

    点击打开链接 Children of the Candy Corn Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8288 ...

  6. poj 3083 Children of the Candy Corn(DFS+BFS)

    做了1天,总是各种错误,很无语 最后还是参考大神的方法 题目:http://poj.org/problem?id=3083 题意:从s到e找分别按照左侧优先和右侧优先的最短路径,和实际的最短路径 DF ...

  7. POJ 3083 Children of the Candy Corn bfs和dfs

      Children of the Candy Corn Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8102   Acc ...

  8. POJ:3083 Children of the Candy Corn(bfs+dfs)

    http://poj.org/problem?id=3083 Description The cornfield maze is a popular Halloween treat. Visitors ...

  9. POJ 3083 Children of the Candy Corn (DFS + BFS + 模拟)

    题目链接:http://poj.org/problem?id=3083 题意: 这里有一个w * h的迷宫,给你入口和出口,让你分别求以下三种情况时,到达出口的步数(总步数包括入口和出口): 第一种: ...

随机推荐

  1. Docker_容器化jenkins

    Docker部署接口自动化持续集成环境第二步,容器化一个Jenkins! 接上文:Docker_容器化gitlab 1:pull一个jenkins镜像 docker pull jenkins 2:查看 ...

  2. tensorflow 曲线拟合

    tensorflow 曲线拟合 Python代码: import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...

  3. proe工程图输出dwg/dxf文件设置

    网上看到不少人分享proe转转dxf/dwg配置文件的,但是看了一圈,几乎都没有涉及到转化线型的,所以自己整理自己的配置文件,写在这里分享出来. 以Pro/engineer WF5.0为例: 1.复制 ...

  4. 当activity改变时,我们如何处理它

    用户和系统触发­的事件,可能造成一个activity状体的改变.这个文档描述了一些常见的情况,和如何去处理这些改变. 原网站:https://developer.android.google.cn/g ...

  5. 揭秘memset与sizeof的结合使用方法

    memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...

  6. Gartner研究副总裁:人工智能的五点傲慢与偏见

    对于人工智能能够为各企业机构完成哪些任务,IT与业务领导者们时常感到困惑,并深受多个人工智能错误观念的困扰.全球领先的信息技术研究和顾问公司Gartner认为,开发人工智能项目的IT与业务领导者必须分 ...

  7. Symfony中Doctrine对应的Mongodb数据类型 data type

    1. hash 就是 json对象 2. collection 就是 数组 3. 若要知道如何使用referenceOne, referenceMany, embbedDocument等 主要查看: ...

  8. A. Elections

    链接 [http://codeforces.com/contest/1043/problem/A] 题意 有n个投票人已经投个对手ai票,让你求最小的k使得k-ai加起来大于,对手得票总和 分析 一个 ...

  9. ElasticSearch 2 (11) - 节点调优(ElasticSearch性能)

    ElasticSearch 2 (11) - 节点调优(ElasticSearch性能) 摘要 一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下 ...

  10. springmvc下载文件

    Controller内代码: @RequestMapping(value = "/upload") public ResponseEntity<byte[]> uplo ...