PAT 天梯赛 【】 L3-015. 球队“食物链” 【BFS+剪枝】
题目链接
https://www.patest.cn/contests/gplt/L3-015
思路
用一个 数组标记 胜负
每次输入一行字符串
然后遍历
如果 碰到 W 那么 vis[i][j] = 1;
如果 碰到 L 那么 vis[j][i] = 1;
然后 食物链 中 所有队伍都有 而且要保持 字典序 最小
那么毫无疑问 第一个 必然是 1
所以 就从 dfs(int cur, int step)
cur 表示 搜到第几支队伍 step 表示搜到第几步了
然后 如果剩下未标记的队伍 都没有 战胜 队伍1 的 那么就要剪去了
因为 再往下搜 也是 不能构成食物链的
AC代码
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;
string s[25];
int vis[20][20];
map <int, int> m;
vector <int> v;
int ans, n;
void dfs(int cur, int step)
{
if (ans == 1)
return;
if (step == n && ans == -1)
{
if (vis[cur][0])
ans = 1;
return;
}
else
{
bool cut = false;
for (int i = 0; i < n; i++)
{
if (m[i] == 0 && vis[i][0])
cut = true;
}
if (cut == false)
return;
for (int i = 0; i < n && ans == -1; i++)
{
if (m[i] == 0 && vis[cur][i])
{
v.push_back(i);
m[i] = 1;
dfs(i, step + 1);
if (ans == -1)
{
m[i] = 0;
v.pop_back();
}
else
return;
}
}
}
}
int main()
{
memset(vis, 0, sizeof(vis));
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
cin >> s[i];
for (int j = 0; j < n; j++)
if (s[i][j] == 'W')
vis[i][j] = 1;
else if (s[i][j] == 'L')
vis[j][i] = 1;
}
int flag = 1;
for (int i = 1; i < n; i++)
{
if (vis[i][0])
{
flag = 0;
break;
}
}
if (flag)
printf("No Solution\n");
else
{
ans = -1;
v.clear();
m.clear();
v.push_back(0);
m[0] = 1;
dfs(0, 1);
if (ans == -1)
printf("No Solution\n");
else
{
vector <int>::iterator it;
for (it = v.begin(); it != v.end(); it++)
{
if (it != v.begin())
printf(" ");
cout << (*it) + 1;
}
cout << endl;
}
}
}
PAT 天梯赛 【】 L3-015. 球队“食物链” 【BFS+剪枝】的更多相关文章
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- PAT 天梯赛 L3-008. 喊山 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L3-008 思路 因为 每个山头 最多有两个 能听到它的 临近山头 那么 我们就可以 给每个 山头 都 分配 最多两 ...
- PAT 天梯赛 L2-013. 红色警报 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L2-013 思路 可以通过图的连通块个数来判断 假如 一座城市的失去 改变了其他城市之间的连通性 那么 这座城市本来 ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- PAT天梯赛 L1-049 天梯赛座位分配
题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...
- PAT天梯赛L3-007 天梯地图
题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
- PAT天梯赛L3-015 球队食物链
读题可以知道是DFS,注意一点,题目说的是赢过,所以str[i][j]=‘W',那么g[i][j]=1,str[i][j]='L',g[j][i]=1 然后就常规搜索即可,还有一点就是剪枝,如果没有可 ...
- PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L2-016 思路 用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 ...
随机推荐
- ABP框架EF6链接Oracle数据库手动迁移
环境:VS2017 + ABP官方模板(不含Zero) +Oracle 11Gx64DB + Oracle 11Gx32Client(PLSQL工具访问) 一.Abp项目的下载以及运行 1.创建ab ...
- (六)Thymeleaf的 th:* 属性之—— th: ->text& utext& href
th:*使用原因: for the sake of simplicity and compactness of the code samples(简化代码) the th:*notation is m ...
- <转>Windows平台下Makefile学习笔记(一)
本文转自:http://blog.csdn.net/clever101/article/details/8147352 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发 ...
- 前端自动化Grunt教程
最近在学习Bootstrap,了解一部分之后,发现Bootstrap使用了LESS,好嘛,开始学习LESS,LESS了解部分,发现自动编译工具Grunt,了解Grunt过程发现需要使用node.js的 ...
- 【整理】mysql中information_schema.tables字段说明
[整理]mysql中information_schema.tables字段说明 2016-05-04 16:47:50| 分类: 默认分类|举报|字号 订阅 下载LOFTER我的照片书 | ...
- 解析spark RDD
RDD是spark抽象的基石,可以说整个spark编程就是对RDD进行的操作 RDD是弹性的分布式数据集,它是只读的,可分区的,这个数据集的全部或者部分数据可以缓存在内存中,在多次计算间重用.所谓 ...
- 快速搭建一个成熟,强壮的App框架【转载】
App框架搭建 招聘信息: iOS 研发工程师 iOS开发工程师 iOS开发实习工程师 新浪微博-Android开发工程师&iOS开发工程师 美术设计师(2D) UI设计师 cocos2dx手 ...
- NPOI 添加下拉列表
需求 给指定列添加下拉列表.如下图: 思路 NPOI的文档网站不能访问了,这里参考的POI文档. 加下拉列表有两种方式,一种直接写字符串,例如 new String[]{"10", ...
- hadoop System times on machines may be out of sync. Check system time and time zones.
之前环境一直好好的,由于玩坏了一个mini3只能复制一个了,但是复制之后就出现这个问题了 解决办法是 设置xshell向每一个窗口发消息http://mofansheng.blog.51cto.com ...
- golang struct 定义中json``解析说明
在代码学习过程中,发现struct定义中可以包含`json:"name"`的声明,所以在网上找了一些资料研究了一下 package main import ( "enco ...