JSK 習題:圖類遊戲-SG函式-dfs法
阿新 • • 發佈:2018-12-15
思路:
對於圖上的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;
}