题目链接

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+剪枝】的更多相关文章

  1. 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code #include <cstdio> #include ...

  2. PAT 天梯赛 L3-008. 喊山 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L3-008 思路 因为 每个山头 最多有两个 能听到它的 临近山头 那么 我们就可以 给每个 山头 都 分配 最多两 ...

  3. PAT 天梯赛 L2-013. 红色警报 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L2-013 思路 可以通过图的连通块个数来判断 假如 一座城市的失去 改变了其他城市之间的连通性 那么 这座城市本来 ...

  4. 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  5. PAT天梯赛 L1-049 天梯赛座位分配

    题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...

  6. PAT天梯赛L3-007 天梯地图

    题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...

  7. PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  8. PAT天梯赛L3-015 球队食物链

    读题可以知道是DFS,注意一点,题目说的是赢过,所以str[i][j]=‘W',那么g[i][j]=1,str[i][j]='L',g[j][i]=1 然后就常规搜索即可,还有一点就是剪枝,如果没有可 ...

  9. PAT 天梯赛 L2-016. 愿天下有情人都是失散多年的兄妹 【BFS】

    题目链接 https://www.patest.cn/contests/gplt/L2-016 思路 用BFS 每层 遍历当代 并且查找当代是否有重复 有重复就跳出 然后 POP 并且将他们的下一代 ...

随机推荐

  1. Codeforces Round #307 (Div. 2) E. GukiZ and GukiZiana (分块)

    题目地址:http://codeforces.com/contest/551/problem/E 将n平均分成sqrt(n)块,对每一块从小到大排序,并设置一个总体偏移量. 改动操作:l~r区间内,对 ...

  2. KingdeeK3-修改单据邮件发送的自定义字段

    只需要执行类似下面语句即可: update ICTemplateentry set FVisForBillType = 63,flookupcls=6 where fid ='P01' and fhe ...

  3. javascript中keyCode与charCode属性

    好记性不如烂笔头啊,最近总是忘记这两个属性的区别.想了想,从别人博客上转一遍过来吧,时常看下 键盘事件拥有两个属性,keyCode和CharCode,他们之间有一些不一样之处.keyCode表示用户按 ...

  4. LVM卷组命令

    一般维护命令  #vgscan //检測系统中全部磁盘  #vgck [卷组名] //用于检查卷组中卷组描写叙述区域信息的一致性.  #vgdisplay [卷组名] //显示卷组的属性信息  #vg ...

  5. Atitit.pdf 预览 转换html attilax总结

    Atitit.pdf 预览 转换html attilax总结 1. Swf flash还是html1 2. pdf2htmlEX1 3. iText 5.5.0 发布,Java 的 PDF 操作类库1 ...

  6. lua学习笔记(十三)

    math库     定义在math中     所有三角函数都使用弧度     指数和对数函数     取整函数     伪随机数math.random         调用时没有参数返回0~1之间的随 ...

  7. oracle导出sql

    1.点击要导出的表2.右键点击exportData3.选择要导出的sql语句

  8. window 添加环境变量

    右击我的电脑 选择属性 点选高级选项卡 点击环境变量 在系统变量中选中path变量 点击编辑 在变量值得最后插入 ;C:\Python27\  (改为Python的实际的安装地址) 记住后面要有最后面 ...

  9. Windows找出占用端口的进程

    第一步:找出监听指定端口的进程号: C:\> netstat -ao | findstr 443  TCP    0.0.0.0:443            Sean-NotePC:0     ...

  10. markdown流程图语法

    从网上找了非常久关于markdown语法的文章.机会微乎其微.大多所指向的都是同一个页面https://github.com/adrai/flowchart.js 这是github上的一个开源项目,里 ...