填字母游戏【蓝桥杯】/博弈+dfs

填字母游戏



博弈+dfs

cpp 复制代码
#include<iostream>
#include<map>
using namespace std;
//要用map存储已经处理过的字符串不然会超时
map<string,int> m;
//dfs返回的就是结果
int dfs(string s)
{
    //剪枝
    if(m.find(s)!=m.end()) return m[s];
    //找到LOL代表输了
    if(s.find("LOL")!=string::npos) return m[s]=-1;
    //找不到空位表示平局
    if(s.find("*")==string::npos) return m[s]=0;
    int ping=0;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]=='*')
        {
            s[i]='L';
            if(dfs(s)==-1) 
            {
                //要回溯后才能存到m中
                s[i]='*';
                return m[s]=1;
            }
            if(dfs(s)==0) ping=1;
            s[i]='O';
            if(dfs(s)==-1) 
            {
                s[i]='*';
                return m[s]=1;
            }
            if(dfs(s)==0) ping=1;
            s[i]='*';
        }
    }
    //ping不为0表示有可能平局,返回0
    if(ping) return m[s]=0;
    //否则返回-1
    return m[s]=-1;
}
int main()
{
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        string s;
        cin>>s;
        cout<<dfs(s)<<endl;
    }
    return 0;
}
相关推荐
对方正在长头发丿4 小时前
LETTERS(DFS)
c++·笔记·算法·深度优先·图论
Jasmin Tin Wei8 小时前
蓝桥杯 web 学海无涯(axios、ecahrts)版本二
前端·蓝桥杯
SheepMeMe9 小时前
蓝桥杯2024省赛PythonB组——日期问题
python·算法·蓝桥杯
随便昵称9 小时前
蓝桥杯专项复习——前缀和和差分
c++·算法·前缀和·蓝桥杯
脑子慢且灵9 小时前
蓝桥杯冲刺:一维前缀和
算法·leetcode·职场和发展·蓝桥杯·动态规划·一维前缀和
姜威鱼10 小时前
蓝桥杯python编程每日刷题 day 21
数据结构·算法·蓝桥杯
双叶83611 小时前
(C语言)单链表(1.0)(单链表教程)(数据结构,指针)
c语言·开发语言·数据结构·算法·游戏
凯强同学11 小时前
第十四届蓝桥杯大赛软件赛省赛Python 大学 C 组:6.棋盘
python·算法·蓝桥杯
wuqingshun31415912 小时前
蓝桥杯 切割
数据结构·c++·算法·职场和发展·蓝桥杯
余华余华13 小时前
2024年蓝桥杯Java B组省赛真题超详解析-分布式队列
java·职场和发展·蓝桥杯