pat 团体天梯赛 L3-015. 球队“食物链”
L3-015. 球队“食物链”
某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。
联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{ T1 T2 ... TN },满足:球队T1战胜过球队T2,球队T2战胜过球队T3,……,球队T(N-1)战胜过球队TN,球队TN战胜过球队T1。
现在主席请你从联赛结果中找出“食物链”。若存在多条“食物链”,请找出字典序最小的。
注:排列{ a1 a2 ...aN }在字典序上小于排列{ b1 b2 ... bN },当且仅当存在整数K(1 <= K <= N),满足:aK < bK且对于任意小于K的正整数i,ai=bi。
输入格式:
输入第一行给出一个整数N(2 <= N <= 20),为参赛球队数。随后N行,每行N个字符,给出了NxN的联赛结果表,其中第i行第j列的字符为球队i在主场对阵球队j的比赛结果:“W”表示球队i战胜球队j,“L”表示球队i负于球队j,“D”表示两队打平,“-”表示无效(当i=j时)。输入中无多余空格。
输出格式:
按题目要求找到“食物链”T1 T2 ... TN,将这N个数依次输出在一行上,数字间以1个空格分隔,行的首尾不得有多余空格。若不存在“食物链”,输出“No Solution”。
输入样例1:
5
-LWDW
W-LDW
WW-LW
DWW-W
DDLW-
输出样例1:
1 3 5 4 2
输入样例2:
5
-WDDW
D-DWL
DD-DW
DDW-D
DDDD-
输出样例2:
No Solution 思路:dfs+剪枝。
#define _CRT_SECURE_NO_DEPRECATE
#pragma warning(disable:4996)
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<cctype>
#include<cmath>
#include<cstring>
#include<vector>
#include<set>
using namespace std;
#define N_MAX 20+5
char contest[N_MAX][N_MAX];
int n;
bool vis[N_MAX];
int road[N_MAX];
bool flag = ;//
bool dfs(int id, int step, int root) {
road[step] = id;
if (step + == n && (contest[id][root] == 'W' || contest[root][id] == 'L'))//个数到n个,并且形成循环
return true;
else if (step + == n)return false;
flag = ;
for (int i = ; i <= n; i++) {
if (!vis[i] && (contest[root][i] == 'L' || contest[i][root] == 'W')) { //剪枝,存在点和root相连
flag = ; break;
}
}
if (flag == )return false;
for (int i = ; i <= n; i++) {
if (i == id || vis[i])continue;
if (contest[id][i] == 'W' || contest[i][id] == 'L') {
vis[i] = true;
if (dfs(i, step + , root))return true;
else vis[i] = false;//寻找失败,回溯
}
}
return false;
}
int main() {
while (scanf("%d", &n) != EOF) {
for (int i = ; i <= n; i++) {
for (int j = ; j <= n; j++) {
scanf(" %c", &contest[i][j]);
}
}
bool is_find = ;
for (int i = ; i <= n; i++) {
memset(vis, , sizeof(vis));
vis[i] = true;
if (dfs(i, , i)) {
is_find = true;
break;
}
}
if (is_find)
for (int i = ; i < n; i++) {
printf("%d%c", road[i], i + == n ? '\n' : ' ');
}
else {
puts("No Solution");
}
}
return ;
}
pat 团体天梯赛 L3-015. 球队“食物链”的更多相关文章
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
		
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
 - pat 团体天梯赛 L3-007. 天梯地图
		
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
 - pat  团体天梯赛 L1-039. 古风排版
		
L1-039. 古风排版 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 中国的古人写文字,是从右向左竖向排版的.本题就请你编写 ...
 - pat 团体天梯赛 L2-012. 关于堆的判断
		
L2-012. 关于堆的判断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的小顶堆H[] ...
 - pat 团体天梯赛 L3-010. 是否完全二叉搜索树
		
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
 - pat 团体天梯赛 L3-009. 长城
		
L3-009. 长城 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 邓俊辉(清华大学) 正如我们所知,中国古代长城的建造是为了抵御外 ...
 - pat 团体天梯赛 L2-011. 玩转二叉树
		
L2-011. 玩转二叉树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜 ...
 - pat 团体天梯赛 L2-010. 排座位
		
L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...
 - pat 团体天梯赛 L2-007. 家庭房产
		
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...
 
随机推荐
- 理解Express 中间件
			
Express 中间件 Express程序基本上是一系列中间件函数的调用.中间件就是一个函数, 接受 req.res.next几个参数. 中间件函数可以执行任何代码, 对请求和响应对象进行修改, 结束 ...
 - oracle 多行数据合并一行数据
			
在工作中遇见的oracle知识,多行合并成一行,记录一下 1.取出需要的数据,代码: (SELECT to_char(m.f_meetdate, 'yyyy-MM-dd'), decode(nvl(m ...
 - 2.在Cisco Packet Tracer里交换机默认网关的配置(实现跨网段telnet)
			
我们将在此拓扑图的基础上进行实验 大多命令都可用tab键位来补齐 1.分别给pc机设置好ip地址 pc2为:192.168.1.1 pc3为:192.168.2.1 两台计算机处在不同的网段之中 2. ...
 - goaccess分析access.log
			
接上一篇,开始学习goaccess使用~ 源码安装完成后,我的goaccess的配置文件goaccess.conf位于/usr/local/etc/ /usr/local/etc/goaccess/g ...
 - Nginx读书笔记
			
... upstream proxy_svrs { server http://192.168.1.1:8001/uri/; server http://192.168.1.2:8001/uri/; ...
 - php同一个用户同时只能登陆一个, 后登陆者踢掉前登陆者(排他登陆)
			
通常用户登陆,如果没有特别的限定, 同一个用户可以同时登陆, 今天搞了一个东西限定一个用户不能同时登陆到一个系统上, 后登陆者会把前面登陆的踢出来.(有点像QQ,同个帐号不能在多个地方同时在线, 后面 ...
 - win7在某个盘或文件夹中出现右键只能新建文件夹的情况 (2012-12-28-bd 写的日志迁移
			
至于只能新建文件夹的情况如图: 解决方法是在运行中输入msconfig进入如图: 在系统设置选工具项在选中更改UAC设置点击启动如图: 如图: 直接把通知栏拉到最低确定即可(如果已经是最低了那就随便改 ...
 - Thread 小总结
			
目录 线程概述 线程的定义 线程的启动 线程的状态 线程的方法属性 1.线程概述 线程是一个程序的多个执行路径,执行调度的单元,依托于进程的存在.线不仅可以共享进程的内在,而且还拥有一个属于自己的内存 ...
 - 水题:HDU-1088-Write a simple HTML Browser(模拟题)
			
解题心得: 1.仔细读题,细心细心...... 2.题的几个要求:超过八十个字符换一行,<br>换行,<hr>打印一个分割线,最后打印一个新的空行.主要是输出要求比较多. 3. ...
 - 如何在C#中调试LINQ查询
			
原文:How to Debug LINQ queries in C# 作者:Michael Shpilt 译文:如何在C#中调试LINQ查询 译者:Lamond Lu 在C#中我最喜欢的特性就是LIN ...