poj 2438 Children's Dining
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();
}
}
| Time Limit: 1000MS | Memory Limit: 65536K | |||
| Total Submissions: 4672 | Accepted: 734 | Special Judge | ||
Description
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
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
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的更多相关文章
- POJ 2438 Children’s Dining (哈密顿图模板题之巧妙建反图 )
题目链接 Description Usually children in kindergarten like to quarrel with each other. This situation an ...
- POJ 2438 Children's Dining(哈密顿回路)
题目链接:http://poj.org/problem?id=2438 本文链接:http://www.cnblogs.com/Ash-ly/p/5452615.html 题意: 有2*N个小朋友要坐 ...
- POJ 2438 哈密顿回路
Children's Dining Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4730 Accepted: 754 ...
- POJ 3083 -- Children of the Candy Corn(DFS+BFS)TLE
POJ 3083 -- Children of the Candy Corn(DFS+BFS) 题意: 给定一个迷宫,S是起点,E是终点,#是墙不可走,.可以走 1)先输出左转优先时,从S到E的步数 ...
- poj 3083 Children of the Candy Corn
点击打开链接 Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8288 ...
- poj 3083 Children of the Candy Corn(DFS+BFS)
做了1天,总是各种错误,很无语 最后还是参考大神的方法 题目:http://poj.org/problem?id=3083 题意:从s到e找分别按照左侧优先和右侧优先的最短路径,和实际的最短路径 DF ...
- POJ 3083 Children of the Candy Corn bfs和dfs
Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8102 Acc ...
- 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 ...
- POJ 3083 Children of the Candy Corn (DFS + BFS + 模拟)
题目链接:http://poj.org/problem?id=3083 题意: 这里有一个w * h的迷宫,给你入口和出口,让你分别求以下三种情况时,到达出口的步数(总步数包括入口和出口): 第一种: ...
随机推荐
- Docker_容器化jenkins
Docker部署接口自动化持续集成环境第二步,容器化一个Jenkins! 接上文:Docker_容器化gitlab 1:pull一个jenkins镜像 docker pull jenkins 2:查看 ...
- tensorflow 曲线拟合
tensorflow 曲线拟合 Python代码: import numpy as np import tensorflow as tf import matplotlib.pyplot as plt ...
- proe工程图输出dwg/dxf文件设置
网上看到不少人分享proe转转dxf/dwg配置文件的,但是看了一圈,几乎都没有涉及到转化线型的,所以自己整理自己的配置文件,写在这里分享出来. 以Pro/engineer WF5.0为例: 1.复制 ...
- 当activity改变时,我们如何处理它
用户和系统触发的事件,可能造成一个activity状体的改变.这个文档描述了一些常见的情况,和如何去处理这些改变. 原网站:https://developer.android.google.cn/g ...
- 揭秘memset与sizeof的结合使用方法
memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...
- Gartner研究副总裁:人工智能的五点傲慢与偏见
对于人工智能能够为各企业机构完成哪些任务,IT与业务领导者们时常感到困惑,并深受多个人工智能错误观念的困扰.全球领先的信息技术研究和顾问公司Gartner认为,开发人工智能项目的IT与业务领导者必须分 ...
- Symfony中Doctrine对应的Mongodb数据类型 data type
1. hash 就是 json对象 2. collection 就是 数组 3. 若要知道如何使用referenceOne, referenceMany, embbedDocument等 主要查看: ...
- A. Elections
链接 [http://codeforces.com/contest/1043/problem/A] 题意 有n个投票人已经投个对手ai票,让你求最小的k使得k-ai加起来大于,对手得票总和 分析 一个 ...
- ElasticSearch 2 (11) - 节点调优(ElasticSearch性能)
ElasticSearch 2 (11) - 节点调优(ElasticSearch性能) 摘要 一个ElasticSearch集群需要多少个节点很难用一种明确的方式回答,但是,我们可以将问题细化成一下 ...
- springmvc下载文件
Controller内代码: @RequestMapping(value = "/upload") public ResponseEntity<byte[]> uplo ...