题目描述

有一群人从1到N标号,而且这群人中每个人的朋友个数不少于 (N+1)/2 个。

编号为1的人有一本其他人都想阅读的书。

写一个程序,找到一种传阅顺序使得书本只经过每个人手中一次,并且一个人只能将书本传给他的朋友,并且书本最后必须传回给第一个人。(注释:如果A是B的朋友,那么B一定是A的朋友)

输入

第一行包含一个数字N。

接下来的有N行,第i行表示第i-1个人的朋友

输出

如果不存在解决方案,则输出 'No solution' 。否则你将输出1行包含N+1个整数,表示传阅路径,由1开始、由1结尾。

输入样例

4

2 3

1 4

1 4

2 3

输出样例

1 3 4 2 1


Solution:

每个人至少有(n+1)/2 个朋友,一定存在哈密顿回路.

找到哈密顿路后,从1 的位置开始输出,最后再输出一个1.

code:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define INF 1111
using namespace std;
bool edge[INF][INF];
int ans[INF], vis[INF];
int n, tol = 2, t, s = 1;
void expand() {
int i;
while (1) {
for (i = 1; i <= n; i++) {
if (edge[t][i] && !vis[i]) {
ans[tol++] = i;
t = i, vis[i] = 1;
break;
}
}
if (i > n) return;
}
}
void Hamiton() {
int i, j;
for (i = 1; i <= n; i++) if (edge[s][i]) break;
t = i;
ans[0] = s, ans[1] = t;
vis[s] = vis[t] = 1;
while (1) {
expand();
reverse (ans, ans + tol);
swap (s, t);
expand();
if (!edge[s][t]) {
for (i = 1; i < tol - 2; i++)
if (edge[ans[i]][t] && edge[ans[i + 1]][s]) break;
reverse (ans + i + 1, ans + tol);
t = ans[tol - 1];
}
if (tol == n) return;
for (j = 1; j <= n; j++) {
if (vis[j]) continue;
for (i = 1; i < tol - 1; i++)
if (edge[ans[i]][j]) break;
if (edge[ans[i]][j]) break;
}
s = ans[i - 1], t = j;
reverse (ans, ans + i);
reverse (ans + i, ans + tol);
ans[tol++] = j, vis[j] = 1;
}
}
int main() {
char ci;
scanf ("%d", &n);
for (int i = 1; i <= n; i++) {
scanf ("%d", &t);
edge[i][t] = edge[t][i] = 1;
ci = getchar();
while (ci != '\n' && ci != '\r' && ci != EOF)
scanf ("%d", &t), edge[i][t] = edge[t][i] = 1, ci = getchar();
}
Hamiton();
int i;
for (i = 0; i < n; i++)
if (ans[i] == 1) break;
for (int j = 0; j < n; j++) {
printf ("%d ", ans[i]);
i++;
if (i == n) i = 0;
}
putchar ('0' + 1);
return 0;
}

  

SGU 122.The book (哈密顿回路)的更多相关文章

  1. sgu 122. The book 满足ore性质的汉密尔顿回路 难度:2

    122. The book time limit per test: 0.25 sec. memory limit per test: 4096 KB There is a group of N (2 ...

  2. The sum - SGU 122(斐波那契前N项和)

    直接上代码....... ======================================================================================= ...

  3. 今日SGU 5.27

    SGU 122 题意:给你n个人,每个人有大于 N / 2(向上取整)的朋友,问你1这个人有一个书,每个人都想看,只能从朋友之间传递,然后最后回到了1这个人,问你 是否有解,然后有解输出路径 收获:哈 ...

  4. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  5. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

  6. SGU 156. Strange Graph(欧拉路)

    时间限制:0.25s 空间限制:6M 题目描述 让我们想象一个无向图G=<V,E>.如果边(u,v)在边集E中,那么我们就说两个顶点u和v是邻接点.在这种情况下,我们也说u是v的一个邻接点 ...

  7. 122. Best Time to Buy and Sell Stock(二) leetcode解题笔记

    122. Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price ...

  8. SGU 495. Kids and Prizes

    水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...

  9. HDU 1693 Eat the Trees(插头DP、棋盘哈密顿回路数)+ URAL 1519 Formula 1(插头DP、棋盘哈密顿单回路数)

    插头DP基础题的样子...输入N,M<=11,以及N*M的01矩阵,0(1)表示有(无)障碍物.输出哈密顿回路(可以多回路)方案数... 看了个ppt,画了下图...感觉还是挺有效的... 参考 ...

随机推荐

  1. 数据结构(莫队算法):HH的项链

    问题描述: HH有一串由各种漂亮的贝壳组成的项链.HH相信不同的贝壳会带来好运,所以每次散步 完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH不断地收集新的贝壳,因此, 他的项链变得越来越长. ...

  2. codeforces -- 283A

    A. Cows and Sequence time limit per test 3 seconds memory limit per test 256 megabytes input standar ...

  3. ubuntu14.04 wps字体缺失问题

    字体 下载安装字体即可

  4. there be 句型

    there be 意思:表示存在或者发生. 英文释义:used to show that sth exists or happens 如果现在进行时,单数时用is,复数时用are. 现在我问你一个问题 ...

  5. hdoj 4324 Triangle LOVE【拓扑排序判断是否存在环】

    Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  6. RabbitMQ 概念

    RabbitMQ快速概念入门 转(http://blog.csdn.net/qq_16414307/article/details/50585630) 本文适有一定消息队列基础的,但没有接触过Ra ...

  7. Mysql性能优化那些事

    ​    ​对于全栈而言,数据库技能不可或缺,关系型数据库或者nosql,内存型数据库或者偏磁盘存储的数据库,对象存储的数据库或者图数据库--林林总总,但是第一必备技能还应该是MySQL.从LAMP的 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(42)-工作流设计01

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(42)-工作流设计01 工作流在实际应用中还是比较广泛,网络中存在很多工作流的图形化插件,可以做到拉拽的工 ...

  9. uva 11178 Morley&#39;s Theorem(计算几何-点和直线)

    Problem D Morley's Theorem Input: Standard Input Output: Standard Output Morley's theorem states tha ...

  10. 颜色渐变的RGB计算

    均匀渐变 渐变(Gradient)是美学中一条重要的形式美法则,与其相对应的是突变.形状.大小.位置.方向.色彩等视觉因素都可以进行渐变.在色彩中,色相.明度.纯度也都可以产生渐变效果,并会表现出具有 ...