您的位置:首页 > 其它

SG 函数 hdu1524 & poj 2425 hdu1524 A Chess Game

2016-08-02 22:58 405 查看
本来只是简单的一道水体,但是没过4级的我,完全看不懂题目,写到中间还有出错误坑我wr了好久,逼我写个解题报告

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int game[1050][1050];
int sg[1050];
int n; /// 标号0~n-1

int flag[1050];

int dfs(int d)
{
if(sg[d]!=-1) return sg[d];
bool flag[1010]={0};
memset(flag,0,sizeof(flag));
for(int i=0;i<n;i++)
if(game[d][i]==1)
flag[dfs(i)]=1;
for(int i=0;;i++) if(flag[i]==0)
return sg[d]=i;
}
int main(){

while(scanf("%d",&n) != EOF){
memset(game,-1,sizeof(game));
memset(sg,-1,sizeof(sg));
int xi,x;
for (int i = 0;i < n;++i){
scanf("%d",&xi);
if (xi == 0) sg[i] = 0;
for (int j = 0;j < xi;++j){
scanf("%d",&x);
game[i][x] = 1;
}
}
int m;
while(scanf("%d",&m) && m){
int idx,ans = 0;
for (int i = 0;i < m;++i){
scanf("%d",&idx);
ans ^= dfs(idx);
}
printf(ans ? "WIN\n":"LOSE\n");
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法