1. 程式人生 > >【博弈】填字母遊戲

【博弈】填字母遊戲

K大師在紙上畫了一行n個格子,要小明和他交替往其中填入字母。
1. 輪到某人填的時候,只能在某個空格中填入L或O
2. 誰先讓字母組成了“LOL”的字樣,誰獲勝。
3. 如果所有格子都填滿了,仍無法組成LOL,則平局。


小明試驗了幾次都輸了,他很慚愧,希望你能用計算機幫他解開這個謎。


本題的輸入格式為:
第一行,數字n(n<10),表示下面有n個初始局面。
接下來,n行,每行一個串,表示開始的局面。
  比如:“******”, 表示有6個空格。“L****”,   表示左邊是一個字母L,它的右邊是4個空格。


要求輸出n個數字,表示對每個局面,如果小明先填,當K大師總是用最強著法的時候,小明的最好結果。
1 表示能贏
-1 表示必輸
0 表示可以逼平


例如,
輸入:
4
***
L**L
L**L***L
L*****L


則程式應該輸出:
0
-1
1

1

原始碼:

#include<iostream>
#include<string>
using namespace std;
int get_re(string s){
    if(s.find("LOL")!=string::npos){
        return -1;
    }
    if(s.find("*")==string::npos){
        return 0;
    }
    int ping=0;
    for(int i=0;i<s.length();i++){
        if(s[i]=='*'){
            s[i]='L';
            switch(get_re(s)){
                case -1:return 1;
                case 0:ping=1;
            }
            s[i]='O';
            switch(get_re(s)){
                case -1:return 1;
                case 0:ping=1;
            }
            s[i]='*';
        }
    }
    if(ping==1) return 0;
    return -1;
}
int main(){
    while(1){
    string s;
    cin>>s;
    cout<<get_re(s)<<endl;

    }
     return 0;
}