5-15 球队“食物链” (30分) -- L3-015. 球队“食物链” (2017天梯初赛 剪枝dfs)
来源:互联网 发布:淘宝描述图片怎么编辑 编辑:程序博客网 时间:2024/05/18 22:18
某国的足球联赛中有NNN支参赛球队,编号从1至NNN。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。
联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至NNN的排列{T1T2⋯TN },满足:球队T1战胜过球队T2,球队T2战胜过球队T3,⋯⋯,球队T(N−1)战胜过球队TN,球队TN战胜过球队T1。
现在主席请你从联赛结果中找出“食物链”。若存在多条“食物链”,请找出字典序最小的。
注:排列{ a1a2⋯⋯aN}在字典序上小于排列{b1 b2⋯⋯bN },当且仅当存在整数K(1≤K≤N),满足aK<bK且对于任意小于K的正整数ii,ai=bi。
输入格式:
输入第一行给出一个整数N(2≤N≤20),为参赛球队数。随后N行,每行N个字符,给出了N×N的联赛结果表,其中第i行第j列的字符为球队i在主场对阵球队j的比赛结果:W
表示球队i战胜球队j,L
表示球队i负于球队j,D
表示两队打平,-
表示无效(当i=j时)。输入中无多余空格。
输出格式:
按题目要求找到“食物链”T1T2⋯⋯TN,将这NNN个数依次输出在一行上,数字间以1个空格分隔,行的首尾不得有多余空格。若不存在“食物链”,输出“No Solution”。
输入样例1:
5-LWDWW-LDWWW-LWDWW-WDDLW-
输出样例1:
1 3 5 4 2
输入样例2:
5-WDDWD-DWLDD-DWDDW-DDDDD-
输出样例2:
No Solution
怎么说呢 很难受
初赛没偷到分 最起码是4分没了 有惊无险进决赛了
这个题其实不难 但是就是卡几个点 下图测试点详情
首先 存在食物链一定是n个点 那么答案肯定是1开头
1 这个图不对称
2 a-win-b 和b-lose-a 等价 也就是说a-b==W 和 b-a==L 等价
3 剪枝 在每次dfs中 如果存在未收录的点不与1“相连” 那么return 此次dfs失效
4 代码写的比较菜
代码
#include <bits/stdc++.h>using namespace std;char mp[22][22]; ///地图bool v[22]; ///标记收录int ans[22];int father; ///记录第一个点int n;bool flag;void dfs(int x,int step){ int i; v[x] = 1; ans[step] = x; if(step==n) { if(mp[x][father] == 'W' || mp[father][x] == 'L') ///用的比较搓了 { flag = 1; } return ; } for(i=1; i<=n; i++) { if(v[i]== 0 && (mp[i][1] == 'W' || mp[1][i] == 'L')) ///a-b==W 和 b-a==L 等价 { break; } } if(i > n) return; ///存在未收录的点不与1"相连" for(i=1; i<=n; i++) { if( (v[i] == 0 && mp[x][i] == 'W' )||(v[i] == 0 && mp[i][x] == 'L')) { v[i] = 1; dfs(i,step+1); if(flag) return ; v[i] = 0; } }}int main(){ int i,j; while(~scanf("%d",&n)) { flag = 0; getchar(); for(i=1; i<=n; i++) { for(j=1; j<=n; j++) { scanf("%c",&mp[i][j]); } getchar(); } for(j=1; j<=n; j++) { memset(v,0,sizeof(v)); father = j; dfs(j,1); if(flag) { for(i=1; i<n; i++) { printf("%d ",ans[i]); } printf("%d\n",ans[n]); break; ///! } } if(j > n) printf("No Solution\n"); } return 0;}
- 5-15 球队“食物链” (30分) -- L3-015. 球队“食物链” (2017天梯初赛 剪枝dfs)
- PTA 5-15 球队“食物链” (2017cccc初赛L3-3)
- L3-015. 球队“食物链”
- 2017CCCC天梯赛—L3-3球队“食物链”
- PAT-练习集-L3-015. 球队“食物链”
- 团体程序设计天梯赛-练习集 -- L3-015. 球队“食物链”(状压+dfs 求哈密顿回路)
- 团体程序设计天梯赛-L3-015-球队“食物链”(状压dfs)
- 团体程序设计天梯赛L3-015 球队“食物链”
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- 食物链
- ORACLE锁机制
- win7下搭建简易FTP服务器
- android:allowbackup="true"
- 爬虫-java-百度--入门
- 转载CSDN中的博客方法
- 5-15 球队“食物链” (30分) -- L3-015. 球队“食物链” (2017天梯初赛 剪枝dfs)
- 多线程操作控件文本
- pat乙级1034
- React-Native AsyncStorage使用
- 蓝桥杯 错误票据
- Pycharm远程调试之Docker debug(三) -- docker on linux
- 分治法求最大子数组
- js:全局变量
- 雷达覆盖(normal)(SSL1232)