1. 程式人生 > >JSK 習題:圖類遊戲-SG函式-dfs法

JSK 習題:圖類遊戲-SG函式-dfs法

在這裡插入圖片描述

思路:

對於圖上的sg函式,常用dfs或深度優先搜尋

程式碼:

#include <iostream>
#include <math.h>
#include <vector>
#include <string.h>
using namespace std;

const int N=10000;
vector<int>e[N];

int sg[N];
int getsg(int x)
{
    if(sg[x]!=-1)
        return sg[x];
    int mex[N];
    memset(mex,0,sizeof
(mex)); for(int i=0;i<e[x].size();i++) mex[getsg(e[x][i])]=1; for(int i=0;;i++) { if(!mex[i]) return sg[x]=i; } } int main() { int n; cin>>n; for(int i=0;i<n;i++) { int t; cin>>t; e[i].clear(); while
(t--) { int a; cin>>a; e[i].push_back(a); } } memset(sg,-1,sizeof(sg)); int m,k; while(cin>>m) { int ans=0; if(m==0) break; for(int i=0;i<m;i++) { cin>>k; ans^
=getsg(k); } if(ans==0) cout<<"LOSE"<<endl; else cout<<"WIN"<<endl; } return 0; }