欢迎访问我的pat顶级题解目录哦 https://blog.csdn.net/richenyunqi/article/details/86751676
题目描述
算法设计
这道题是pat甲级1148 Werewolf - Simple Version、pat乙级1089 狼人杀-简单版的升级版,依然采取暴力枚举的方法。将每个人所说的话保存在一维数组a
的a[1]-a[n]
中。利用深度优先搜索从n向1逐个玩家地进行枚举,枚举的每个玩家有两种情况:
- 该玩家是狼人,则将该玩家的编号存储在
set<int>ans
变量中 - 该玩家不是狼人,则枚举下一玩家
DFS递归函数终止条件是当枚举的玩家编号为0或者ans
的长度为m时,结束当前搜索,如果ans
的长度为m,则ans中的元素即为所有狼人玩家的编号,然后判断这种情况下是否满足题设条件即可。具体实现可见代码。
C++代码
#include<bits/stdc++.h>
using namespace std;
int n,m,l,a[105];
set<int>ans;//存储狼人玩家编号
void DFS(int index,bool&f){
//深度优先搜索,f标记是否有满足题设条件的情况
if(index==0||ans